将数据从第二个窗体传递回第一个窗体,并使用C#中的委托将类传递回
本文关键字:窗体 数据 第二个 第一个 | 更新日期: 2023-09-27 18:21:05
从FormA,我使用frmB.Show();
调用FormB
在FormB中,我有两个文本框。假设用户在这两个文本框中输入了一些数据。我需要将其添加到FormA上的ListBox中。
为了实现这一点,我创建了一个委托实例,并在创建frmB对象后在FormA中调用它——这很好。
在FormB中,创建Class1对象,并调用其中一个方法,该方法还需要访问/更新FormA中的ListBox。
我无法在FormA中为Class1创建实例,因为Class1实例是在FormB中创建的。我试图将Class1委托实例分配给FormB实例,但它不起作用。
我怎样才能做到这一点?
我会在FormB中公开一个事件,当您需要更新FormA时会调用该事件。在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事件教程以获取更多帮助!