将数据从第二个窗体传递回第一个窗体,并使用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实例,但它不起作用。

我怎样才能做到这一点?

将数据从第二个窗体传递回第一个窗体,并使用C#中的委托将类传递回

我会在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事件教程以获取更多帮助!