現在、作成するユーザーの数に応じて、Panelに複数のテキストボックスコントロールを作成する小さなアプリケーションを作成しています。 その後、このテキストボックスのテキストを取得したいと思いますが、このためにはContoll名が必要です。たぶんあなたの誰かが私がどのように作成されたすべてのTextBoxのコントロール名を見つけることができるか教えてくれるかもしれません。ダイナミックに作成されたテキストボックスのControll.Nameの取得
ありがとうございます。
現在、作成するユーザーの数に応じて、Panelに複数のテキストボックスコントロールを作成する小さなアプリケーションを作成しています。 その後、このテキストボックスのテキストを取得したいと思いますが、このためにはContoll名が必要です。たぶんあなたの誰かが私がどのように作成されたすべてのTextBoxのコントロール名を見つけることができるか教えてくれるかもしれません。ダイナミックに作成されたテキストボックスのControll.Nameの取得
ありがとうございます。
私はかなりしていますそれぞれのテキストボックスを異なる方法で扱うようにしてください。例えば、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;
}
}
このコードは、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;
テキストボックスを作成するときに明示的に名前を設定しないのはなぜですか。しかし、あなたが何人あるか知りたくないときに、なぜ名前にアクセスする必要があるのか分かりません。パネルの子を列挙してテキストボックスを取得するだけです。または、配列を作成するときに配列に格納し、配列経由でアクセスします。 – itsme86