0

我在两种形式之间传递字符串值时遇到问题。

首先我创建了公共字符串sanacode,我分配了传入的值form 2

表格 1 代码

AnalysisEdit ae = new AnalysisEdit();
int Row = dataGridView1.CurrentRow.Index;
ae.sanacode = dataGridView1[0, Row].Value.ToString();
ae.Show();

表格 2 构造函数代码

public AnalysisEdit()
{
    InitializeComponent();
    MessageBox.Show(sanacode,);
}

它什么也没显示

4

5 回答 5

2

改变你的构造函数

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();
于 2013-06-20T12:09:13.213 回答
1

问题是您没有按正确的顺序调用事物。表单 2 的构造函数代码将在表单代码的第 1 行被调用,或者AnalysisEdit ae = new AnalysisEdit();然而,这是在第 3 行发生的赋值之前:ae.sanacode = dataGridView1[0, Row].Value.ToString(); 所以当你在表单 2 构造函数中显示消息框时,sanacode尚未被赋值。

有两种方法可以解决此问题。首先,您可以按照@kostas ch.的回答通过构造函数传递值,或者您可以覆盖OnShown表单2中的表单事件:

protected override void OnShown(EventArgs e)
{
    MessageBox.Show(sanacode);
}
于 2013-06-20T12:21:46.333 回答
0

我不会放你的代码

MessageBox.Show(sanacode,);

在构造函数中。我会使用“加载”事件。如果您使用“加载”事件,您的 MessageBox 将显示,当您使用

ae.Show();

像这样

private void AnalysisEdit_Load(object sender, EventArgs e)
    {
        MessageBox.Show(sanacode);
    }
于 2013-06-20T12:14:03.610 回答
0

也许您想了解在表单之间传递数据的各种方法。我写了两篇关于这个主题的博客文章:

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

于 2013-06-20T14:23:20.997 回答
-1

您可以暂时添加MessageBox.Show()到您的二传手:

// In Form2
public sanacode
{
  set
  {
    _sanacode = value;
    MessageBox.Show(_sanacode);
  }

  get
  {
    return _sanacode;
  }
}
于 2013-06-20T12:31:58.223 回答