在两个窗体之间传递字符串

本文关键字:之间 字符串 窗体 两个 | 更新日期: 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;
  }
}