私はこれがどのように行われるかを忘れ続けています。
フォームのインスタンスを作成せずに、Form2からメインフォームのUIを更新したいと思います。
デリゲート/イベントを使用し、おそらく最初のフォームのインスタンスをなんとかして渡したのを覚えていますが、完全に空白になりました。
助けてくれてありがとう。
Form2からForm1のlistBox1に何かを追加します。
私はこれがどのように行われるかを忘れ続けています。
フォームのインスタンスを作成せずに、Form2からメインフォームのUIを更新したいと思います。
デリゲート/イベントを使用し、おそらく最初のフォームのインスタンスをなんとかして渡したのを覚えていますが、完全に空白になりました。
助けてくれてありがとう。
Form2からForm1のlistBox1に何かを追加します。
はい、デリゲートとイベントは正しいキーワードです
EventArgs クラスをどこかに実装します。
public class MyEventArgs : EventArgs
{
private List<string> EventInfo;
public MyEventArgs(List<string> strings)
{
EventInfo = strings;
}
public List<string> GetInfo()
{
return EventInfo;
}
}
Form2 の場合:
public class Form2
{
public event EventHandler<MyEventArgs> OnMyChange;
//call it then you need to update:
if(OnMyChange!= null)
{
MyEventArgs e = new MyEventArgs();
List<string> content = new List<string>();
content.Add("abc");
e.EventInfo = content;
OnMyChange(this, e);
}
}
Form1 の場合:
Form2 MyForm2 = new Form2();
MyForm2.OnMyChange += MyChanged;
static void MyChanged(object source, MyEventArgs e)
{
//e.EventInfo will contain list
Console.WriteLine("changed");
}
インスタンス化していないオブジェクトを更新することはできません。
あなたができることは、form2の変更イベントのハンドラーとしていくつかの関数を登録することです。関数がメインフォームのメンバーである場合、そのフォームのコンポーネントに影響を与える可能性があります。
デリゲートを渡すことは基本的に同じですが、選択した任意の関数を使用できます。ただし、ほとんどの場合、これはオーバーヘッドの価値がありません。
質問から必要なものを正確に取得するのは難しいですが、アイテムを追加するためにアクションをフォームに渡すことができるようです。Form2 のコンストラクターを変更して、常にコールバックがあるようにすることができます。
private Action<string> addItemsToParent;
public Form2(Action<string> addItemsToParent)
{
this.addItemsToParent = addItemsToParent;
}
public void AddItems()
{
addItemsToParent("item 1");
}