0

私は現在、テキストボックス、ボタンなどの 2D 配列を動的に作成したフォームを持っています。プログラムの他の部分が、作成したテキストボックスにアクセスできないことがわかりました。私ができる方法はありますか?

私のコードは次のようになります:

    public Form1()
    {
        int column = 4;

        System.Windows.Forms.TextBox[,] textbox = new System.Windows.Forms.TextBox[column, row];

        for (int i = 0; i < column; i++)
        {
            for (int j = 0; j < row; j++)
            {
                textbox[i, j] = new System.Windows.Forms.TextBox();
                textbox[i, j].Size = new Size(80, 20);
                textbox[i, j].Name = "textbox_" + i + "_" + j;
                textbox[i, j].Location = new System.Drawing.Point((i * 80) + 20, (j * 20) + 30);
                textbox[i, j].Visible = true;
                Controls.Add(textbox[i, j]);

            }
        }

        /////fill the textboxes with data//////
    }

メソッド外のテキスト ボックスにアクセスできません。いくつかの作業コードを提供できますか? 私はまだC#に比較的慣れていません。どうもありがとう

4

4 に答える 4

0

次のようにクラスレベルのプロパティを追加できます

public class Form1
{
    public System.Windows.Forms.TextBox[,] textbox { get; set; }

    public Form1()
    {
        int column = 4;

        textbox = new System.Windows.Forms.TextBox[column, row];

        for (int i = 0; i < column; i++)
        {
            for (int j = 0; j < row; j++)
            {
                textbox[i, j] = new System.Windows.Forms.TextBox();
                textbox[i, j].Size = new Size(80, 20);
                textbox[i, j].Name = "textbox_" + i + "_" + j;
                textbox[i, j].Location = new System.Drawing.Point((i * 80) + 20, (j * 20) + 30);
                textbox[i, j].Visible = true;
                Controls.Add(textbox[i, j]);

            }
        }
    }
}

その後、あなたは単に好きなことをすることができます

Form1 myForm = GetMyForm();
System.Windows.Forms.TextBox[,] theTextboxArray = myForm.textbox;
于 2012-07-21T10:33:42.423 に答える
0

確かにtextbox_i_j、サポートされていないため、i & j が IntelliSense の数字である場合にアクセスすることはできませんが、このように取得できます

TextBox GetTB(string name)
{
 return ( Controls.FindControl(name) as TextBox );
} 
于 2012-07-21T10:35:49.193 に答える
0
Declare int column = 4;
System.Windows.Forms.TextBox[,] textbox = new System.Windows.Forms.TextBox[column, row];

Form1 コンストラクターの外側。コードは次のようになります。

int column = 4;
System.Windows.Forms.TextBox[,] textbox;
public Form1()
{


    textbox = new System.Windows.Forms.TextBox[column, row];

    for (int i = 0; i < column; i++)
    {
        for (int j = 0; j < row; j++)
        {
            textbox[i, j] = new System.Windows.Forms.TextBox();
            textbox[i, j].Size = new Size(80, 20);
            textbox[i, j].Name = "textbox_" + i + "_" + j;
            textbox[i, j].Location = new System.Drawing.Point((i * 80) + 20, (j * 20) + 30);
            textbox[i, j].Visible = true;
            Controls.Add(textbox[i, j]);

        }
    }

    /////fill the textboxes with data//////
}
于 2012-07-21T10:36:35.990 に答える
0

頭のいい人が私の質問に答えてくれるのを待っている間、答えをネットで検索しました。辞書を使用してテキスト ボックスを取得すると、次のようになります。

C# で名前を指定して Windows フォーム コントロールを取得する

//宣言

  Dictionary <String, System.Windows.Forms.TextBox> dictionaryTextBox = new Dictionary<string, System.Windows.Forms.TextBox>();

// 配列の作成

 System.Windows.Forms.TextBox[,] textbox = new System.Windows.Forms.TextBox[column, row];

        for (int i = 0; i < column; i++)
        {
            for (int j = 0; j < row; j++)
            {
                textbox[i, j] = new System.Windows.Forms.TextBox();
                textbox[i, j].Size = new Size(80, 20);
                textbox[i, j].Name = "textbox_" + i + "_" + j;
                textbox[i, j].Location = new System.Drawing.Point((i * 80) + 20, (j * 20) + 30);
                textbox[i, j].Visible = true;
                Controls.Add(textbox[i, j]);


                  //new added
                dictionaryTextBox.Add (textbox[i, j].Name, textbox[i, j]);

            }
        }

// 取得

        System.Windows.Forms.TextBox retrieve = dictionaryTextBox["textbox_3_3"];

        retrieve.Text = "apple";
于 2012-07-21T11:15:15.727 に答える