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();
}