2016-12-04 9 views
-1

現在、作成するユーザーの数に応じて、Panelに複数のテキストボックスコントロールを作成する小さなアプリケーションを作成しています。 その後、このテキストボックスのテキストを取得したいと思いますが、このためにはContoll名が必要です。たぶんあなたの誰かが私がどのように作成されたすべてのTextBoxのコントロール名を見つけることができるか教えてくれるかもしれません。ダイナミックに作成されたテキストボックスのControll.Nameの取得

ありがとうございます。

+0

テキストボックスを作成するときに明示的に名前を設定しないのはなぜですか。しかし、あなたが何人あるか知りたくないときに、なぜ名前にアクセスする必要があるのか​​分かりません。パネルの子を列挙してテキストボックスを取得するだけです。または、配列を作成するときに配列に格納し、配列経由でアクセスします。 – itsme86

答えて

0

私はかなりしていますそれぞれのテキストボックスを異なる方法で扱うようにしてください。例えば、1つのテキストボックスのテキスト値はファーストネーム、次のファーストネームなどとなります。だから、あなたはテキストボックスの名前を必要とするだけでなく、それぞれに異なる何かをする必要があります。ここで私はループ内にいくつかのテキストボックスを生成するいくつかのコードです。私はそれらに名前をつけて、それらにイベントハンドラを追加します。ハンドラでは、テキストに入力された値をどうするかを決定します。

public Form1() 
{ 
    InitializeComponent(); 

    for (int i = 0; i < 5; i++) 
    { 
     var txtBox = new TextBox(); 
     txtBox.Name = "TextBox" + i; 
     txtBox.TextChanged += TxtBox_TextChanged; 
     this.tableLayoutPanel1.Controls.Add(txtBox); 
    } 
} 

private void TxtBox_TextChanged(object sender, EventArgs e) 
{ 
    var txtBox = sender as TextBox; 
    string firstName = string.Empty; 
    string lastName = string.Empty; 
    switch (txtBox.Name) 
    { 
     case "TextBox1": 
      firstName = txtBox.Text; 
      break; 
     case "TextBox2": 
      lastName = txtBox.Text; 
      break; 
     // more cases here but you get the point... 
     default: 
      break; 
    } 
} 
0

このコードは、TextBoxにControlからそれをキャストし、tableLayoutPanel1からtextbox1をピックアップしTextプロパティを取ります

string s = ((TextBox)tableLayoutPanel1.Controls["TxtBox1"]).Text; 

あなたがそれらすべてを必要とする場合は、テキストボックスを反復処理:

string[] t = new string[4]; 
for(int i=0; i<4; i++) 
    t[i] = ((TextBox)tableLayoutPanel1.Controls["TxtBox"+(i+1).ToString()]).Text; 
関連する問題