2013-05-02 39 views
0

嗨,我有創建新的變量的文本框還不存在,但可以在運行時創建的代碼。它工作的偉大,看到代碼波紋管如何在公共部分類中聲明Textbox值(使用Controls.Find)而不出錯?

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 

有人知道如何解決它嗎?

+0

什麼是'gpbCategoria'對象? – Chris 2013-05-02 22:02:02

+0

@Chris Bain正如我在錯誤之上所說的,gpbCategoria是我的groupbox名稱(在運行時創建的所有標籤和文本框都在這個groupboxname中。謝謝 – 2013-05-02 22:06:27

+0

如果控件是在運行時創建的,那麼如何才能找到「txtAcessorio4」它...因爲該行聲明變量,並試圖在創建窗體時爲其賦值。顯然,由於您在運行時創建了控件,因此無法找到它。此外,「gpbCategoria」容器還沒有被初始化並添加到表單中,這是錯誤真正抱怨的原因,爲了使代碼正常工作,您只需聲明變量:'TextBox txtAcessorio4 = null;'然後在控件之後分配它 – 2013-05-02 22:09:45

回答

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

一定的「未來」例如你可以看看my example project併發揮與它周圍的。它可以與sharpdevelop 4.3開放。

相關問題