動的に配置したコントロールの値を取得するには?

解決


Tetsu  2006-07-27 19:44:21  No: 132483

こんにちわ。初めて質問させていただきます。

現在、フォーム上にボタンを配置し、ボタンを押す度に
テキストボックスが複数個、動的にフォームに配置するようにしています。
(現在はボタンを1度クリックするとテキストボックスが4つ、
  もう一度押すと計8つのテキストボックスが配置されるようにしています。)
最終的に、追加したテキストボックスのすべての値を、
XMLなり何なりにファイルに落とそうと考えているのですが、
それぞれのテキストボックスに入力した値の取得方法がわかりません。
どのように動的に配置したテキストボックスのプロパティ値を取得できるのでしょうか。

開発環境は、VB.NET 2003/ WinXP Home  です。よろしくお願いします。

以下、ソース
    Private myTxtCollection() As System.Windows.Forms.TextBox
    Private num As Integer = 0

    Private Sub BtnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAdd.Click

        '''' 総数に+1
        num = num + 1
 
        Me.myTxtCollection = New System.Windows.Forms.TextBox(3) {}
        Me.SuspendLayout()
        Dim TextName() As String = New String(3) {"Txt1st", "Txt2nd", "Txt3rd", "Txt4th"}
        Dim i As Integer

        For i = 0 To Me.myTxtCollection.Length - 1
            Me.myTxtCollection(i) = New System.Windows.Forms.TextBox
            Me.myTxtCollection(i).Name = TextName(i) + num.ToString
            'Me.myTxtCollection(i).Text = TextName(i) + num.ToString
            Me.myTxtCollection(i).Width = 40
            Me.myTxtCollection(i).Height = 19
            Me.myTxtCollection(i).Location = _
                New Point(40 + Me.myTxtCollection(i).Width * i, _
                8 + (Me.myTxtCollection(i).Height + 5) * num)

        Next

        Me.Controls.AddRange(Me.myTxtCollection)
        Me.ResumeLayout(False)
    End Sub


T★M  2006-07-27 20:10:44  No: 132484

Form.Controlsプロパティからコントロールのコレクションを取得、各コントロールの型を調べてTextBoxなら処理をする、で良いかと。


Tetsu  2006-07-27 20:55:37  No: 132485

T★M 様

回答ありがとうございます。
試してみたところ、確かに取得することが出来ました。
ただ、この場合、もしフォーム内に別のテキストボックスがあれば
それらも全て拾ってしまうので、
動的に配置するコントロールをパネル内に置くなり、
名前で判別するなり、コントロールのindexなりで振り分けて
目的のものだけを取得しようと思います。

ありがとうございました。


KG  2006-07-27 21:23:50  No: 132486

もう解決したみたいですが、
Collectionを別に用意しておいて
動的に配置する際に,それにAddさせると対象を絞れるかと思います。

あとはFor Eachでループさせるだけかな:D

#こういう場合は、私はそうしてますが、正しいやり方かどうかは
#自信がありません・・・


T★M  2006-07-27 22:06:27  No: 132487

私が同様の事を行おうと思ったら、KGさんの言われる方法を取ります。
後から使用することを考えたら、本道的じゃないかと。


Tetsu  2006-07-27 22:43:47  No: 132488

KG様、T★M様

なるほど、そちらの方が確かに後々のことを考えると便利そうですね。
任意の文字列をキーとして同時にCollectionに格納すれば、
それで個別にも受け取れるでしょうから。
勉強になります。ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加