在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。
考虑你有Form1
和Form2
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的文本框中得到更新。