form2を閉じるときにform1を更新するにはどうすればよいですか
質問
Form 2が閉じているときにForm1を更新しようとしています。 Form2の閉鎖イベントを使用することは知っていますが、それは私が迷子になる場所です。
ありがとう
解決
これを達成する良い方法は、メディエーターパターンを使用することです。このようにして、あなたのフォームは必ずしもお互いを知る必要はありません。メディエーターがフォーム間の相互作用を管理できるようにして、個々のフォームが独自の責任に集中できるようにします。
あなたが望むものを達成する非常に粗い調停者は、そうするように実装することができます:
public class FormMediator
{
public Form MainForm { private get; set; }
public Form SubForm { private get; set; }
public void InitializeMediator()
{
MainForm.FormClosed += MainForm_FormClosed;
}
void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
SubForm.Refresh();
}
}
これで、メインフォームが閉じられるたびにサブフォームが更新され、お互いについて何も知る必要はありません。
編集:
わかりました、だから私はあなたが始めるようになるこのソリューションを出力するつもりですが、これはメディエーターパターンの初歩的な実装にすぎないことに注意してください。何が起こっているのかをよりよく理解するために、そのパターンとデザインパターンについて読んでみることを強くお勧めします。
繰り返しますが、これはサンプルですが、基本的なエラーチェックがあり、進む必要があります。
あなたのフォーム宣言は次のようになります:
public partial class MainForm : Form
{
private FormMediator _formMediator;
public MainForm()
{
InitializeComponent();
}
public void SomeMethodThatOpensTheSubForm()
{
SubForm subForm = new SubForm();
_formMediator = new FormMediator(this, subForm);
subForm.Show(this);
}
}
メディエーターの変更された実装は次のようになります。
public class FormMediator
{
private Form _subForm;
private Form _mainForm;
public FormMediator(Form mainForm, Form subForm)
{
if (mainForm == null)
throw new ArgumentNullException("mainForm");
if (subForm == null)
throw new ArgumentNullException("subForm");
_mainForm = mainForm;
_subForm = subForm;
_subForm.FormClosed += MainForm_FormClosed;
}
void MainForm_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
_mainForm.Refresh();
}
catch(NullReferenceException ex)
{
throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex);
}
}
}
他のヒント
1つの解決策は、Form1の参照をコンストラクター内のForm2に渡し、FORM2の閉鎖イベントでF1.Invalidate(true)を呼び出すことです。
所属していません StackOverflow