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");
    }
}

この作成された変数をコードの別の場所でも使用したいという問題、ii試しました:

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");
    }
}

しかし、パブリック部分クラスで次のエラーが発生しました(gpbCategoryは私のグループボックス名です):

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 に答える