Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/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,当我试图将单元格信息从Form2中的GridView传递回Form1时,这里有一个小问题 问题是,表格1已经开放,我无法访问,因为他的保护级别 这是我的密码 private void tableDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { System.Data.DataRowView SelectedRowView; Database1DataSet.TableRow Se

当我试图将单元格信息从
Form2
中的
GridView
传递回
Form1
时,这里有一个小问题

问题是,表格1已经开放,我无法访问,因为他的保护级别

这是我的密码

private void tableDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    System.Data.DataRowView SelectedRowView;
    Database1DataSet.TableRow SelectedRow;

    SelectedRowView = (System.Data.DataRowView)tableBindingSource.Current;
    SelectedRow = (Database1DataSet.TableRow)SelectedRowView.Row;

    Form1.nome_clienteTextBox = SelectedRow.nome_cliente;

}

在表单设计器中,将文本框的
修饰符
属性标记为
Public

或者,更好的做法是,在
Form1
的类中有一个公共属性,用于更改文本框:

public string NomeCliente 
{
  get { return nome_clienteTextBox.Text; }
  set { nome_clienteTextBox.Text = value; }
}
把它叫做:

Form1.NomeCliente = SelectedRow.nome_cliente;
假设
Form1
是变量名(原始表单的实例)。如果
Form1
是类名,那么您需要实例化它(您在打开它时已经实例化了),并在表单上的某个地方引用它。一种可能的方法是:

表格2:

private Form1 _myFirstForm;

public Form2(Form1 myForm)
{
  _myFirstForm = myForm;
}

private void tableDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
  System.Data.DataRowView SelectedRowView;
  Database1DataSet.TableRow SelectedRow;

  SelectedRowView = (System.Data.DataRowView)tableBindingSource.Current;
  SelectedRow = (Database1DataSet.TableRow)SelectedRowView.Row;

  _myFirstForm.NomeCliente = SelectedRow.nome_cliente;
}
在表格1中(如果您从
Form1
打开新的
Form2
):


即使该属性是公共的,也不能像那样访问它。只有当它是静态的。您需要使用Form1的实例。我假设
Form1
是变量的名称,而不是类的名称。将进行编辑以指定它。@Jcl当我单击此处的单元格时,一个奇怪的错误提示我:“在SistemaPPE.exe中发生了类型为'System.NullReferenceException'的未处理异常。其他信息:请参阅'ncia de objeto não definida para uma insta–ncia de um objeto'。(对象引用没有为对象实例定义-我的翻译)“你还可以帮我解决这些问题吗?注意:我很抱歉我的帖子的英语不好,格式也不好。这意味着你正在访问的对象实例为空(它没有设置值)。如果给出该错误的行是
\u myFirstForm.NomeCliente=SelectedRow.nome\u cliente;
,则可能
\u myFirstForm
null
,这意味着您尚未在构造函数上为其设置值。
public void OpenForm2()
{
  // this will more likely leak memory if you don't handle the 
  // disposing of Form2 somewhere else, but that's beyond the 
  // scope of this answer 
  var myForm2 = new Form2(this);  
  myForm2.Show();
}