web-dev-qa-db-ja.com

別のフォームでのボタン送信がクリックされたときにC#でフォームをリロードする方法は?

C#にコンボボックスがあり、frmMainという名前のフォームに配置されています。これは、設定フォームにfrmSettingsという名前の製品を追加すると(ボタンbutton1_Clickを使用して)自動的に入力されます。ボタンbutton1_Clickをクリックすると、新しく追加された製品のfrmMainが表示されます。

使ってみました

frmMain main = new frmMain();
main.Close();
main.Show();

このコードがとても面白いことは知っていますが、うまくいきませんでした。 :D

これはウィンドウフォームです!

[〜#〜]編集[〜#〜]

理解を深めるために、私のプログラムのこの画像をご覧ください。これは私のfrmMainです enter image description here

frmSettingsフォームの設定は次のようになります。したがって、送信ボタンをクリックするとわかるように、frmMainを再読み込みして、設定に追加した更新された値がfrmMainコンボボックスに表示されるようにします。

enter image description here

3
Jayseer

更新:質問を変更したので、ここに製品を更新するための更新バージョンがあります

これはあなたの製品フォームです:

_private frmMain main;

public frmSettings(frmMain mainForm)
{
  main = mainForm;
  InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
  main.AddProduct(textBox1.Text);
}
_

データを渡すには、コンストラクターにメインフォームが必要です。

そして主な形式:

_private frmSettings settings;
private List<string> products = new List<string>();

public frmMain()
{
  InitializeComponent();
  //load products from somewhere
}

private void button1_Click(object sender, EventArgs e)
{
  if (settings == null)
  {
    settings = new frmSettings(this);
  }
  settings.Show();
}

private void UpdateForm()
{
  comboBoxProducts.Items.Clear();
  comboBoxProducts.Items.AddRange(products.ToArray());

  //Other updates
}

public void AddProduct(string product)
{
  products.Add(product);
  UpdateForm();
}
_

次に、フォームのどこからでもUpdateForm()を呼び出すことができます。たとえば、別のボタンです。この例では、ローカル変数のみを使用して商品を保存しています。製品を追加するための特定のチェックが欠落していることもありますが、私はあなたがアイデアを得ると思います...

5
DerApe

必要に応じてすべての値を設定するための組み込みメソッドはありません。コメントで述べたように、すべてのコントロールに必要な設定を使用してメソッドを作成する必要があります。サンプルコードは次のとおりです。

private void ReloadForm()
{
    comboBox.ResetText();
    dataGridView.Update();   
    //and how many controls or settings you want, just add them here
}

private void button1_Click(object sender, EventArgs e)
{
    ReloadForm();   //and call that method on your button click
}
1
Shaharyar
this.Close();
frmMain main = new frmMain();
main.Show();
1
Teja Reddy
this.Refresh();
Refresh();
this.Hide();
frmScholars ss = new frmScholars();
ss.Show();
0
user5553449

このコードを試してください。

this.Refresh();
Application.Doevents();
0
Pir Fahim Shah
0
Nahum

Usercontrolからページを更新する場合。usercontrolからフォームを更新する例を次に示します。このリロードボタンがあるフォームを見つけてください。次に、無効化タブコントロールを呼び出して更新します。

Dim myForm As Form = btnAuthorise.FindForm()

For Each c As Control In myForm.Controls
                If c.Name = "tabControlName" Then
                    DirectCast(c, System.Windows.Forms.TabControl).Invalidate()
                    DirectCast(c, System.Windows.Forms.TabControl).Refresh() 'force the call to the drawitem event
                End If
 Next
0
pali