在两个窗体之间传递字符串
本文关键字:之间 字符串 窗体 两个 | 更新日期: 2023-09-27 18:19:24
我有一个问题,在两个形式之间传递字符串值
首先,我创建了公共字符串sanacode
,我分配了form 2
传递的值
表格1代码
AnalysisEdit ae = new AnalysisEdit();
int Row = dataGridView1.CurrentRow.Index;
ae.sanacode = dataGridView1[0, Row].Value.ToString();
ae.Show();
Form 2构造函数代码
public AnalysisEdit()
{
InitializeComponent();
MessageBox.Show(sanacode,);
}
它什么也没显示
从
更改构造函数public AnalysisEdit()
{
InitializeComponent();
MessageBox.Show(sanacode);
}
public AnalysisEdit(string sanacode)
{
InitializeComponent();
MessageBox.Show(sanacode);
}
形式调用
int Row = dataGridView1.CurrentRow.Index;
AnalysisEdit ae = new AnalysisEdit(dataGridView1[0, Row].Value.ToString());
ae.Show();
问题是你没有按正确的顺序调用东西。表单2构造函数代码将在表单代码的第1行或AnalysisEdit ae = new AnalysisEdit();
上调用,然而,这是在第3行发生的赋值之前:ae.sanacode = dataGridView1[0, Row].Value.ToString();
因此,当您在表单2构造函数中显示消息框时,sanacode
尚未被赋值。
有两种方法可以解决这个问题。首先,您可以根据@kostas ch.的答案通过构造函数传递值,或者您可以在表单2中覆盖表单的OnShown
事件:
protected override void OnShown(EventArgs e)
{
MessageBox.Show(sanacode);
}
我不会把你的代码
MessageBox.Show(sanacode,);
构造函数中的。我会使用"Load"事件。如果你使用"Load"事件你的消息框将显示,当你使用
ae.Show();
这样的private void AnalysisEdit_Load(object sender, EventArgs e)
{
MessageBox.Show(sanacode);
}
也许您想了解在表单之间传递数据的各种方法。我已经写了两篇关于这个主题的博文:
http://geek-goddess-bonnie.blogspot.com/2011/01/passing-data-between-forms.html http://geek-goddess-bonnie.blogspot.com/2012/12/passing-data-between-forms-redux_31.html您可以临时将MessageBox.Show()
添加到setter:
// In Form2
public sanacode
{
set
{
_sanacode = value;
MessageBox.Show(_sanacode);
}
get
{
return _sanacode;
}
}