将信息从表单传递到另一个表单时出现问题

时间:2014-12-01 14:08:20

标签: c# winforms

当我尝试将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;

}

1 个答案:

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