0

ユーザーの選択に応じていくつかのテキストボックスを作成しています(1-5)。テキストが変更されたときにプログラムテキストボックスの値にアクセスするにはどうすればよいですか。

class starts{
    int i=0;

    .....

    TextBox txtb4 = new TextBox();
    txtb4.Name = "textname" + Convert.ToString(i);
    ArrayText.Add(txtb4);
    System.Drawing.Point p5 = new System.Drawing.Point(120, 15);
    txtb4.Location = p5;
    txtb4.Size = new System.Drawing.Size(80, 30);
    txtb4.Text = stringMy;
    grBox1.Controls.Add(txtb4);
    i++;
}

以下のコードを使用して最初のテキストボックステキストにアクセスできますが、値が変更された後はアクセスできません。

label15.Text = grBox1.Controls["textname0"].Text;
4

2 に答える 2

4

だから、のようなもの...

TextBox txtb4 = new TextBox();
txtb4.Name = "textname" + Convert.ToString(i);
txtb4.TextChanged += textbox_TextChanged;
ArrayText.Add(txtb4);

// ...

void textbox_TextChanged(object sender, EventArgs e)
{
    var textbox = (TextBox)sender;
    // work with textbox
}
于 2012-05-02T17:21:16.563 に答える
2

イベントハンドラーを追加する

txtb4.TextChanged += Txtb4_TextChanged;

このようにハンドラーを宣言します

static void Txtb4_TextChanged(object sender, EventArgs e)
{
    string s = txtb4.Text;
    ...
}    

テキストボックスを動的に作成します。ただし、コードはあまり動的に見えません。これを試して

List<TextBox> _textBoxes = new List<TextBox>();
int _nextTextBoxTop = 15;

private void AddTextBox(string initialText)
{
    var tb = new TextBox();
    tb.Name = "tb" + _textBoxes.Count;
    _textBoxes.Add(tb);
    tb.Location = new Point(120, _nextTextBoxTop);
    _nextTextBoxTop += 36;
    tb.Size = new Size(80, 30);
    tb.Text = initialText;
    tb.TextChanged += TextBox_TextChanged
    grBox1.Controls.Add(tb);
}

static void TextBox_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    string s = tb.Text;
    ...
}    

そして、私はを介してテキストボックスにアクセスしませんでしgrBox1.Controls["textname0"].Text;た。テキストボックスリストは、コントロール名の代わりに数値インデックスを介してアクセスできるため、より適切な選択です。

string s = _textBoxes[i].Text;
于 2012-05-02T17:22:18.570 に答える