0

嗨,我有代码为尚不存在的文本框创建新变量,但可以在运行时创建。它工作得很好,请参见下面的代码

public void btnApagar_Click(object sender, EventArgs e)
{
    TextBox txtAcessorio4 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio4", false).FirstOrDefault();

    if (txtAcessorio4 != null && txtAcessorio4.Text == "" && lblAcessorio4.Name == "lblAcessorio4")
    {
        MessageBox.Show("Perfect");
    }
}

我也想在代码的其他地方使用这个创建的变量的问题,我试过:

public partial class cad_produto_acessorios_novo : Form
{
    TextBox txtAcessorio4 = (TextBox)gpbCategoria.Controls.Find("txtAcessorio4", false).FirstOrDefault();
}

public void btnApagar_Click(object sender, EventArgs e)
{    
    if (txtAcessorio4 != null && txtAcessorio4.Text == "" && lblAcessorio4.Name == "lblAcessorio4")
    {
         MessageBox.Show("Perfect");
    }
}

但我在公共部分类上出现以下错误(gpbCategoria 是我的组框名称):

Error   1   A field initializer cannot reference the non-static field, method, or property 'InfoEarth_Cad_Cliente.cad_produto_acessorios_novo.gpbCategoria

有人知道如何解决吗?

4

1 回答 1

0

你最近的许多问题都指向同一个方向。

如果要访问在运行时创建的控件(如标签或文本框),则需要某种容器(数组或列表)。这样,.net 框架在运行时检查容器中是否存在控件。

void BtnApagar_ClickClick(object sender, EventArgs e)
{
    // test if textbox 4 exist by counting the number of added textboxes
    if(textBoxList.Count ==4 || textBoxList.Count > 4)
    {
        // List and array are 0 based --> index 3 is the 4th textbox
        MessageBox.Show("Perfect we have " 
                        + " at least 4 boxes and the name is: " 
                        + textBoxList[3].Name);     
    }else {
        MessageBox.Show("Number of textboxes is not enough - add more");
    }
}

(TextBox)gpbCategoria.Controls.Find("txtAcessorio4", false).FirstOrDefault(); 我们可以通过索引访问列表来获取 textbox_4 的某个“未来”实例,而不是使用

您可以查看我的示例项目并尝试使用它。它可以与sharpdevelop 4.3 开放。

于 2013-05-04T12:10:53.500 回答