我有一个主要表单MainForm
,它会打开另一个表单NewPasswordForm
。一旦我单击主窗体上的AddButton就会发生这种情况。代码如下:
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;
}
我的问题是,点击AddButton
上的NewPasswordForm
后,如何传递该信息?
答案 0 :(得分:3)
将一个公共属性添加到NewPasswordForm,在方法中设置它的值,然后从主窗体中查询此属性。
更新:我正在按照要求发表评论。问题是:为什么不定义和触发事件以及所需的数据,并从主窗体中捕获它。答案是事件驱动的体系结构用于设计REACTIVE系统,响应不同组件给出的异步事件。但在这种情况下,这种事件的作用是通过按下的按钮来执行的。除此之外,没有理由添加任何异步行为。按下按钮后,确定属性已设置并准备好读取。如果我们想在按钮点击后运行一些进程,并等到它完成,那么事件就会到位。但事实并非如此
答案 1 :(得分:2)
这里是公共财产事物I(和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上时:
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方法中实例化了两个NewPasswordForms。你不需要两个这个操作。