-2

WinForms C# を使用して定義 (新しい Web フォーム aspx) を作成しやすくするために、小さなアプリを作成しようとしています。

これで、このフォームで、作成するテキストボックスの数をアプリに伝えます。

それらの作成後、私が書いたテキストボックスの値を文字列に割り当てたいと思います。

    private void CreateControls()
    {
        for (int index = 0; index < NumberOfRows; index++)
        {
            TextBox textBox = new TextBox();
            textBox.Name = "TextBox" + (index + 1).ToString();
            textBox.Size = new Size(120, 20);
            textBox.Location = new Point(X, Y + 26);

            ComboBox comboBox = new ComboBox();
            comboBox.Name = "ComboBox" + (index + 1).ToString();
            comboBox.Size = new Size(75, 20);
            comboBox.Location = new Point(141, Y + 26);
            comboBox.DataSource = Enum.GetNames(typeof(DataTypes));

            Y += 26;

            this.Controls.Add(textBox);
            this.Controls.Add(comboBox);
        }
    }

今、テキストボックスが作成されているかどうかを確認してから、その値を取得する方法がわかりません。

誰か私に何かを紹介してもらえますか?ありがとう :)!

4

2 に答える 2

2

Page_Loadで、これらのコントロールを見つけて値を取得する必要があります。作成時に意味のある名前を付けたので、これでうまくいくはずです。

for (int index = 0; index < NumberOfRows; index++)
{
    TextBox textBox = this.FindControl(
        string.Format("TextBox{0}", index)) as TextBox;
    if (textBox == null) { continue; }  // this means it wasn't found

    var text = textBox.Text;
    // work with the text
}

ただし、ComboBox使用しているクラスがサード パーティのクラスでも ASP.NET アプリケーションでもない場合、コードは Windows フォーム アプリケーションでも動作しますが、わずかな変更が必要です。

for (int index = 0; index < NumberOfRows; index++)
{
    // you have to use the Find method of the ControlCollection
    TextBox textBox = this.Controls.Find(
        string.Format("TextBox{0}", index)) as TextBox;
    if (textBox == null) { continue; }  // this means it wasn't found

    var text = textBox.Text;
    // work with the text
}

標準のASP.NET コントロールLocationの を設定できないため、おそらく Windows フォーム アプリケーションであるというコミュニティに同意する傾向があります。ただし、これらがユーザー コントロールであるか、またはそれらのプロパティをサポートし、適切な CSS をレンダリングするサードパーティ コントロールであるかどうかはわかりません。

于 2013-09-17T13:38:13.813 に答える