在两个表单之间传递字符串

时间:2013-06-20 12:06:10

标签: c# winforms

我在两个表单之间传递字符串值时遇到问题。

首先我创建了公共字符串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,);
}

它没有给我看任何东西

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

问题是你没有按正确的顺序打电话。表单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);
}

答案 2 :(得分:0)

我不会把你的代码

MessageBox.Show(sanacode,);

在构造函数中。我会使用“加载” - 事件。 如果使用“加载” - 当您使用

时,您的MessageBox将显示
ae.Show();

喜欢这个

private void AnalysisEdit_Load(object sender, EventArgs e)
    {
        MessageBox.Show(sanacode);
    }

答案 3 :(得分: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

答案 4 :(得分:-1)

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

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

  get
  {
    return _sanacode;
  }
}