将信息从另一个表单返回到主表单

时间:2014-11-19 19:38:17

标签: c# .net winforms forms

我有一个主要表单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后,如何传递该信息?

2 个答案:

答案 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。你不需要两个这个操作。