在Windows窗体之间传递值c#

我正在努力研究如何在表单之间传递值。 我有四种forms,我想将Login检索到的信息传递给第四种和最后一种forms。

这是我迄今为止。

在这个function中:

 private void btnLogin_Click(object sender, EventArgs e) 

我已经反序列化了我想要的数据:

 NewDataSet resultingMessage = (NewDataSet)serializer.Deserialize(rdr); 

然后,当我打电话给下一个表格时,我已经这样做了:

 Form myFrm = new frmVoiceOver(resultingMessage); myFrm.Show(); 

然后,我的VoiceOver窗体如下所示:

 public frmVoiceOver(NewDataSet loginData) { InitializeComponent(); } private void btnVoiceOverNo_Click(object sender, EventArgs e) { this.Close(); Form myFrm = new frmClipInformation(); myFrm.Show(); } 

当我debugging时,我可以看到数据在第二种forms在loginData中,但我似乎无法访问它在btnVoiceOverNo_Click事件。 我如何访问它,以便将它传递给下一个表单?

您需要将loginData放入frmVoiceOver类的局部variables中,以便能够从其他方法访问它。 目前它的作用域是构造函数:

 class frmVoiceOver : Form { private NewDataSet _loginData; public frmVoiceOver(NewDataSet loginData) { _loginData = loginData; InitializeComponent(); } private void btnVoiceOverNo_Click(object sender, EventArgs e) { // Use _loginData here. this.Close(); Form myFrm = new frmClipInformation(); myFrm.Show(); } } 

另外,如果这两个表单在同一个进程中,则可能不需要序列化数据,只需将其作为标准引用传递给表单的构造函数即可。

谷歌的东西,如“ C#variables范围 ”了解更多的在这方面,你会遇到这个概念一直。 我感谢你是自学成才,所以我只是想加强:-)

在各种情况下,当发生某些事件时,我们可能需要将值从一种forms传递给另一种forms。 这里是一个简单的例子,你可以如何实现这个function。

考虑你有Form1Form2 Form1是Form1的孩子的两种forms。 这两种forms都有两个文本框,其中每当在Form2的文本框中更改文本时, Form1文本框被更新。

以下是Form1的代码

 private void btnShowForm2_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.UpdateTextBox += new EventHandler<TextChangeEventArgs>(txtBox_TextChanged); form2.ShowDialog(); } private void txtBox_TextChanged(object sender, TextChangeEventArgs e) { textBox1.Text = e.prpStrDataToPass; } 

以下是Form2的代码

 public event EventHandler<TextChangeEventArgs> UpdateTextBox; private string strText; public string prpStrText { get { return strText; } set { if (strText != value) { strText = value; OnTextBoxTextChanged(new TextChangeEventArgs(strText)); } } } private void textBox_Form2_TextChanged(object sender, EventArgs e) { prpStrText = txtBox_Form2.Text; } protected virtual void OnTextBoxTextChanged(TextChangeEventArgs e) { EventHandler<TextChangeEventArgs> eventHandler = UpdateTextBox; if (eventHandler != null) { eventHandler(this, e); } } 

为了传递值,我们应该将数据存储在从EventArgs派生的类中

 public class TextChangeEventArgs : EventArgs { private string strDataToPass; public TextChangeEventArgs(string _text) { this.strDataToPass = _text; } public string prpStrDataToPass { get { return strDataToPass; } } } 

现在,每当Form2中的文本更改,相同的文本在Form1的文本框中得到更新。