Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在两个窗体之间传递字符串_C#_Winforms - Fatal编程技术网

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

C# 在两个窗体之间传递字符串,c#,winforms,C#,Winforms,我在两个表单之间传递字符串值时遇到问题 首先,我创建了一个公共字符串sanacode,我将传递给表单2中的值赋值 表格1代码 AnalysisEdit ae = new AnalysisEdit(); int Row = dataGridView1.CurrentRow.Index; ae.sanacode = dataGridView1[0, Row].Value.ToString(); ae.Show(); public AnalysisEdit() { InitializeCom

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

首先,我创建了一个公共字符串
sanacode
,我将传递给
表单2中的值赋值

表格1代码

AnalysisEdit ae = new AnalysisEdit();
int Row = dataGridView1.CurrentRow.Index;
ae.sanacode = dataGridView1[0, Row].Value.ToString();
ae.Show();
public AnalysisEdit()
{
    InitializeComponent();
    MessageBox.Show(sanacode,);
}
表格2构造代码

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

它不会给我任何改变

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

通知单

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

我不会把你的密码

MessageBox.Show(sanacode,);
在构造函数中。我会使用“加载”事件。 如果您使用“加载”-事件,当您使用

ae.Show();
像这样

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

问题是你没有按正确的顺序调用东西。表单2构造函数代码将在表单代码的第1行调用,或
AnalysisEdit ae=new AnalysisEdit()但是,这是在第3行上发生的赋值之前:
ae.sanacode=dataGridView1[0,第行].Value.ToString()因此,当您在form 2构造函数中显示messagebox时,
sanacode
尚未分配给

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

protected override void OnShown(EventArgs e)
{
    MessageBox.Show(sanacode);
}

您可以临时将
MessageBox.Show()
添加到setter:

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

  get
  {
    return _sanacode;
  }
}

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


您的代码未编译。能否确保
ae.sanacode=dataGridView1[0,第行].Value.ToString()是否正在回调任何值?还要发布更多的
AnalysisEdit
表单的代码,否则您将导致每个人都发布一个属性或变量。您可能已经这样做了。它告诉我必须有一个带空参数的构造函数使用messagebox的想法是确保字符串传递正确我想要的是从datagrid中传递字符串,格式为1,用于格式为2,即使我也认为其他解决方案更好,我的代码与您刚才描述的完全相同。它将接受一个字符串,您将该字符串应用于Form1中的sanacode,并在加载Form2后显示该字符串