将信息从另一个窗体返回到主窗体

本文关键字:窗体 返回 另一个 信息 | 更新日期: 2023-09-27 18:30:59

我有一个主窗体,MainForm,它打开了另一个窗体,NewPasswordForm 。一旦我单击主窗体上的添加按钮,就会发生这种情况。代码如下:

MainForm : Form {
    private void AddButton_Click(object sender, EventArgs e) {
        NewPasswordForm newPassword = new NewPasswordForm();
        using (NewPasswordForm form = new NewPasswordForm())
        {
            var result = form.ShowDialog();
            if (result == DialogResult.OK)
            {
                Console.WriteLine("Made it work");
                Login login = new Login();
                //Need to get passed the login information from the NewPasswordForm
                //so that I can add it to a list of Logins 
            }
        }            
    }
}

NewPaswordForm有四个字段需要填写。一旦我点击了我想要的NewPasswordForm中的添加按钮

public partial class NewPasswordForm : Form {
    Login login = new Login();
    private void AddButton_Click(object sender, EventArgs e) {
        //Do stuff with the four fields to creat a Login
        //pass the login along with the DialogResult.OK below.
        this.DialogResult = DialogResult.OK;
    }

我的问题是,单击NewPasswordForm上的AddButton后,如何传递该信息?

将信息从另一个窗体返回到主窗体

将公共属性添加到 NewPasswordForm,在方法中设置其值,然后从主窗体查询此属性。

更新:我根据要求将其从评论中删除。问题是:为什么不定义和触发事件以及所需的数据,并从主窗体中捕获它。答案是,事件驱动架构旨在设计反应式系统,响应不同组件给出的异步事件。但在这种情况下,此类事件的作用是通过按下的按钮来执行的。除了这个行为之外,没有理由添加任何异步行为。按下按钮后,将确定该属性已设置并准备好读取。如果我们想在单击按钮后运行一些进程,并等到它完成,该事件将就位。但事实并非如此

以下是我(和 Eugene Sh.)提到的公共属性的代码示例:

public partial class NewPasswordForm : Form {
    public Login LoginInfo { get; private set; }
    private void AddButton_Click(object sender, EventArgs e) {
        LoginInfo = new Login();
        //Do stuff with the four fields to create a Login
        //pass the login along with the DialogResult.OK below.
        this.DialogResult = DialogResult.OK;
    }
}

然后,一旦您回到主窗体:

MainForm : Form {
    private void AddButton_Click(object sender, EventArgs e) {
        //NewPasswordForm newPassword = new NewPasswordForm(); // Don't need this line
        using (NewPasswordForm form = new NewPasswordForm())
        {
            var result = form.ShowDialog();
            if (result == DialogResult.OK)
            {
                Console.WriteLine("Made it work");
                Login login = form.LoginInfo;
                // do something
            }
        }            
    }
}

编辑:我刚刚意识到在您的AddButton_Click方法中实例化了两个新密码表单。此操作不需要两个。