さまざまなことを試してみたので、明らかに行き詰まっています...フォームを作成しました。フォームにはボタンがあり、クリックすると新しいフォームが作成されます。この方法でクリックして複数のフォームを作成できます。私が望んでいてうまくいかないのは、メイン フォームに 2 番目のボタンを配置することです。クリックすると、セカンダリ フォームのすべての背景色が変更されます。
ありがとう - 私は閉じていると思いますが、もう一度 - 閉じることができません...
基本的に、この問題を解決するためにイベントやデリゲートの種類は必要ありません。セカンダリ フォームで、背景色を変更するパブリック メソッドを記述します。二次フォームのリストを保持し、ボタンがクリックされたら、すべての二次フォームをループして、色を変更するメソッドを呼び出します
イベントの使用
親フォームで次のようにします。
private event Action<Color> ChangeColor;
private void CreateAndShowForm()
{
var form2 = new Form2();
ChangeColor += form2.changeColor;
/*do other stuff to show form*/
}
private void button1_Click(object sender, EventArgs e)
{
ChangeColor(Color.Red);
}
子フォームで
public void changeColor(Color obj)
{
/*change background color*/
}
.NET では、イベントが発生すると、イベントをリッスンしている (イベント リスナーとして登録されている) すべてのオブジェクトに、イベントが発生したことが通知され、それぞれのイベント ハンドラーが実行されます。したがって、あなたの場合、各サブフォームは、イベントリスナーとしてメインフォームの特定のイベントに登録する必要があります。メイン フォームがイベントを発生させるたびに、サブフォームはイベントが発生したことを通知され、それに応じて動作します。
これは、C# のイベント パラダイムへのガイドと見なすことができます。
私が助けてくれることを願っています!