如何通过公共静态类将值从一种形式传递到另一种形式的私有TextBox?

时间:2018-11-21 15:13:01

标签: c# class constructor static public

我有一个Invoice form,其中包含几个私有TextBox。我想将某些值从search form中的DataGridView传递到Invoice form中的那些TextBox(例如,当我按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是私有的...由于受到保护,因此无法这样做   级别...

我认为我必须制作一个公共静态类,但我不知道如何做。 我如何尝试:

 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 
    }

哪个错误:

  

无法将类型'string'隐式转换为   “ system.windows.forms.textbox”。

2 个答案:

答案 0 :(得分:0)

好吧,错误很明显,您正在尝试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; 

但是您问的是错误的问题。因为您不必“为此创建一个公共静态类”。如果您将文本框设置为受保护的(如果您的第二个表单继承了第一个表单)或将其设为私有而不是私有,则可以按照我的第一个示例直接分配值。

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

答案 1 :(得分:0)

您是否尝试过在 InvoiceForm (称为 InvoiceForm.Designer.cs 文件)中将CodeTextBox的访问级别更改为公开。