将信息从另一个窗体返回到主窗体
本文关键字:窗体 返回 另一个 信息 | 更新日期: 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方法中实例化了两个新密码表单。此操作不需要两个。