1. ホーム
  2. c#

[解決済み] 別のフォームの送信ボタンがクリックされたときに、C#でフォームを再読み込みするにはどうすればよいですか?

2022-02-27 18:56:21

質問

私のC#では、コンボボックスは、フォームの名前 frmMain を追加すると、自動的に入力されます。 button1_Click という名前の製品を設定フォームに追加しました。 frmSettings . ボタンをクリックすると button1_Click を再読み込みしたい。 frmMain をクリックすると、新しく追加された商品が表示されます。

を使ってみました。

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

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

これがウィンドウズ・フォームだ!

EDIT

私のプログラムを理解するために、この画像をご覧ください。 これは私の frmMain <イグ

以下は、私の設定です。 frmSettings のようなフォームになります。そこで、投稿ボタンをクリックしたときに、ご覧のように frmMain をリロードして、設定に追加した更新された値が frmMain コンボボックスです。

解決方法は?

更新: 質問を変更されたので、製品を更新するための更新版はこちらです。

これがあなたの製品フォームです。

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() を、フォーム上のあらゆる場所、たとえば別のボタンから呼び出すことができます。 この例では、ローカル変数に商品を格納するだけです。また、商品を追加する際のチェックも抜けていますが、まあ、お分かりいただけると思います。