当我尝试将GridView
中的Form2
的单元格信息传递回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;
}
答案 0 :(得分:3)
在表单设计器中,将文本框的Modifiers
属性标记为Public
或者,更好的是,在您的Form1
课程中设置了一个更改文本框的公共财产:
public string NomeCliente
{
get { return nome_clienteTextBox.Text; }
set { nome_clienteTextBox.Text = value; }
}
并称之为:
Form1.NomeCliente = SelectedRow.nome_cliente;
假设Form1
是您的变量名称(原始表单的实例)。如果Form1
是类名,那么您需要实例化它(当您打开它时已经执行过)并在表单上的某个位置引用它以进行更改。可能的方法是:
在Form2中:
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;
}
在Form1中(如果您从Form2
打开新的Form1
):
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();
}