如何通过 pubic static class 将值从一个表单传递到另一个表单中的私有 TextBox?

How to pass a value from one form to a private TextBox in another Form via a pubic static class?

我有一个 Invoice form 和几个私人文本框。我想将一些值从 search form 中的 DataGridView 传递到 Invoice form 中的那些文本框(例如,当我按 Enter 键时)。 我想要做的是将 DataGridView 中当前选定行的值传递给 Invoice Form 中的某些 TextBoxes: 我可以在下面的代码中说明这一点: (我知道如何在 datagridview 中获取选定行的值我的问题只是标题...)

if (e.KeyCode == Keys.Enter)
{
    SqlCommand sqlcmd = new SqlCommand("SELECT ID FROM X WHERE ID=" +
                        dataGridView1.CurrentRow.Cells[0].Value + "", sqlcon);
    SqlDataReader sqldr = sqlcmd.ExecuteReader();
    while (sqldr.Read())
    {
        InvoiceForm.CodeTextBox = sqldr[codecolumn].Tostring
        InvoiceForm.NameTextBox = sqldr[Namecolumn].Tostring
        InvoiceForm.BlahTextBox = sqldr[Blahcolumn].Tostring                               
    }
}

这会向我抛出以下错误:

codeTextBox is private... not able to do so because of protection level...

我想我必须制作一个 public 静态 class 才能这样做,但我不知道如何做。 我是如何尝试的:

 private string RetrivedCode;
        private string RetrivedName;
        private int RetrivedQTY;
        ...

    Public Form1(string CodeTextBox , string NameTextBox, string BlahTextBox)
    {
      this.CodeTextBox= RetrivedCode; 
      this.NameTextBox= RetrivedName; 
      ... and so On 
    }

哪些错误:

cannot implicitly convert type 'string' to 'system.windows.forms.textbox'.

嗯,错误很明显,你正在尝试convert type 'string' to 'system.windows.forms.textbox'.

while (sqldr.Read())
{
    //textbox                  string
    InvoiceForm.CodeTextBox = sqldr[codecolumn].Tostring();
    InvoiceForm.NameTextBox = sqldr[Namecolumn].Tostring();
    InvoiceForm.BlahTextBox = sqldr[Blahcolumn].Tostring();
}

如果您改为在文本框上设置 text 属性,错误就会消失。

while (sqldr.Read())
{
    // Note the ´Text´ property.
    InvoiceForm.CodeTextBox.Text = sqldr[codecolumn].Tostring();
    InvoiceForm.NameTextBox.Text = sqldr[Namecolumn].Tostring();
    InvoiceForm.BlahTextBox.Text = sqldr[Blahcolumn].Tostring();
}

更新:

确实是同一件事,即使是第二部分抛出错误。我假设 CodeTextBox 是一个文本框?

this.CodeTextBox.Text = RetrivedCode; 
this.NameTextBox.Text = RetrivedName; 

但你问错了问题。因为您不必 "make a public static class to do so"。如果您使文本框受保护(如果您的第二个表单继承了第一个表单)或 public 而不是私有的,您将能够根据我的第一个示例直接分配值。

如果您的文本框必须是私有的,请使用 public 或受保护的访问器或 public 方法来设置文本框的文本 属性 的值。

您是否尝试过在名为 [=17] 的 InvoiceForm 中将 CodeTextBox 的访问级别更改为 public =] 文件.