フォーム2が閉じられているときに、フォーム1をリフレッシュしようとしています。私はform2からの閉会イベントを使用することを知っていますが、私は紛失してしまいます。フォーム2を閉じたときにリフレッシュするにはどうすればいいですか
おかげ
フォーム2が閉じられているときに、フォーム1をリフレッシュしようとしています。私はform2からの閉会イベントを使用することを知っていますが、私は紛失してしまいます。フォーム2を閉じたときにリフレッシュするにはどうすればいいですか
おかげ
メディエーターパターンを使用するとよいでしょう。このようにして、フォームはお互いを必ずしも知る必要はありません。各フォームがそれぞれの責任に集中できるように、フォーム間の相互作用を管理することをメディエータに許可します。あなたが望むものを達成するであろう
非常に粗製のメディエータはそうように実装することができます
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();
}
}
メインフォームが閉じていない、どちらもお互いについて何を知っていなければならない時はいつでも今、あなたのサブフォームが更新されます。
EDIT:
オクラホマので、私はそれから、このソリューションを置くつもりですが、あなたが始めるだろうが、これはMediatorパターンの唯一の初歩的な実装であることに注意してください。どんなことが起こっているのかをより良く理解するためには、そのパターンとデザインパターン全般を読むことを強くお勧めします。
これもまたサンプルですが、いくつかの基本的なエラーチェックが行われています。
フォームの宣言は次のようなものを見に行くされています
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);
}
}
}
は一つの解決策は、コンストラクタでのForm2にForm1の参照を渡すだけのForm2のclosingイベントにf1.Invalidate(true)を呼び出すことです。
私はこれを使用するのではなくていませんよ解決策もありますが、初心者としてはコンストラクタを使用したことがありません。だから私はあなたが何を意味するか分からない。 – JimDel
実際にはデザインパターンです。ジョシュがそれを書いてしまうまで、クラスは存在しませんでした。 :)どのように使用するかに関しては、アプリケーションはそのインスタンスを作成し、そのMainFormとSubFormのプロパティを設定します。 – GalacticCowboy
FWIWでは、フォーム "SubscriberForm"と "SubscribedForm"を実際に呼び出すことができます。サブスクライバは、更新したいサブスクライバであり、サブスクライブは、クローズイベントを取得するサブスクライバです。 – GalacticCowboy
それは素晴らしいジョシュです。それをすべて差し込んで、広告されたとおりに動作します!私は今夜新しいことを学びました。ありがとう! – JimDel