我从FormA使用frmB.Show();
在FormB中,我有两个文本框。假设用户在这两个文本框中输入了一些数据。 我需要将它添加到FormA上的ListBox。
为了实现这一点,我创建了一个委托实例,并在创建了frmB对象后在FormA中调用它 - 这很好。
在FormB中,创建了Class1对象,并调用了其中一个方法,该方法还需要访问/更新FormA中的ListBox。
我无法在FormA中为Class1创建实例,因为在FormB中创建了Class1实例。我试图将Class1委托实例分配给FormB实例,但它无法正常工作。
我怎样才能做到这一点?
答案 0 :(得分:0)
我会在您需要更新FormA时调用FormB中的事件。在FormA调用formBInstance.Show()
之前,您可以将一个委托连接到事件处理程序,以处理您在FormA中需要执行的操作:formBInstance.UpdateEvent += myDelegateEventHandler
。
因此,当FormB需要更新FormA时,您只需触发该事件,代理将在FormA下按预期运行。
编辑以显示更多代码!
FormB.cs:
// You can add more parameters to this to pass any data you need
// in addition to the object sender you pass back
public delegate void UpdateEventHandler(object sender, EventArgs e)
public class FormB : Form
{
public event UpdateEventHandler Update;
private void update()
{
// do your updates to formB here
InvokeUpdateEvent(objectThatContainsUsefulData);
}
protected void InvokeUpdateEvent(object sender)
{
var handler = UpdateEvent;
if (handler != null)
handler(sender, null);
}
}
FormA.cs:
public class FormA : Form
{
private void myUpdateDelegate(object sender, EventArgs e)
{
// Do your updates that formA will require here
}
public void methodCallingFormB()
{
// Do whatever you need to set up for creating form B
var formB = new FormB();
formB.UpdateEvent += myUpdateDelegate;
formB.Show();
}
}
我希望你们都有意义。查看MSDN Events Tutorial以获取更多帮助!