0

フォームを開く簡単なボタンがありますAddStation(このボタンはMainFormフォームに配置されています):

var AddStation = new AddStation();
AddStation.Show();

フォームは正常に表示されますが、フォームAddStationには保存ボタンがあります。このボタンを押すとAddStationフォームが閉じます、のクラスにあるメソッドを実行したいMainForm(に存在するリストボックスを更新するためMainForm)。

フォームAddStationには への参照がないため、これは現在の方法では不可能MainFormですが、どうすればよいでしょうか? フォームMainForm.UpdateListBoxからメソッドを実行するにはどうすればよいですか?AddStation

4

5 に答える 5

3

FormClosingメインで購読できます:

 AddStation.FormClosing += new FormClosingEventHandler(AddStation_FormClosing);

そして、メインで次のようにします。

void AddStation_FormClosing(object sender, FormClosingEventArgs e)
{
  UpdateListBox ();
}

もちろん、これはフォームが閉じているときに発生します。

編集済み: 独自のイベントを宣言して、AddStationメインにサブスクライブさせることもできます:

AddStation で:

public event EventHandler TimeToUpdateListBox;

そして、それが適切だと思うときはいつでも (おそらく AddStation を閉じるボタンがクリックされたとき):

if (TimeToUpdateListBox != null)
  TimeToUpdateListBox(this, new EventArgs());

メイン:

void AddStation_TimeToUpdateListBox(object sender, EventArgs e)
{
  UpdateListBox ();
}
于 2012-04-27T14:04:10.160 に答える
1

実際のクラス オブジェクトの代わりに AddStation に var を使用している理由はありますか?

通常、私が行うことは次のようなことです。

AddStation frmAddStation = new AddStation();
if (frmAddStation.ShowDialog() == DialogResult.OK) {
    //<call your update listbox function here>
}

次に、AddStation の [保存] ボタンから呼び出される関数で、次のことを確認してください。

this.DialogResult = DialogResult.OK;

これの利点は、フォームにキャンセル ボタンがある場合、

this.DialogResult = DialogResult.Cancel;

次に、コードは ListBox の更新を実行しません。

于 2012-04-27T14:04:25.363 に答える
0

Save ボタンの DialogResult を に設定しますDialogResult.OK。次に、この方法で 2 番目のフォームを表示します。

using(var AddStation = new AddStation())
{
   if (AddStation.ShowDialog() == DialogResult.OK)
      // update listbox
}
于 2012-04-27T14:05:47.980 に答える
0

オーバーロードされた Show メソッドを使用し、メイン フォームを所有者として渡し、メイン フォームで適切なメソッドを呼び出すことができます - http://msdn.microsoft.com/en-us/library/szcefbbd.aspx

于 2012-04-27T14:06:19.990 に答える
0

彼の答えを削除したのはダンステンだったと思いますが、完璧に機能しました。

追加した

public MainForm mainForm;

私のクラスの上にAddStation、フォームを呼び出すときにこれを使用しました:

var AddStation = new AddStation();
AddStation.mainForm = this;
AddStation.Show();

そして今、私はメソッド/オブジェクトにアクセスできるようになりましたAddStation(私が求めていた)!

于 2012-04-27T14:14:43.813 に答える