こんにちわ。初めて質問させていただきます。
現在、フォーム上にボタンを配置し、ボタンを押す度に
テキストボックスが複数個、動的にフォームに配置するようにしています。
(現在はボタンを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
Form.Controlsプロパティからコントロールのコレクションを取得、各コントロールの型を調べてTextBoxなら処理をする、で良いかと。
T★M 様
回答ありがとうございます。
試してみたところ、確かに取得することが出来ました。
ただ、この場合、もしフォーム内に別のテキストボックスがあれば
それらも全て拾ってしまうので、
動的に配置するコントロールをパネル内に置くなり、
名前で判別するなり、コントロールのindexなりで振り分けて
目的のものだけを取得しようと思います。
ありがとうございました。
もう解決したみたいですが、
Collectionを別に用意しておいて
動的に配置する際に,それにAddさせると対象を絞れるかと思います。
あとはFor Eachでループさせるだけかな:D
#こういう場合は、私はそうしてますが、正しいやり方かどうかは
#自信がありません・・・
私が同様の事を行おうと思ったら、KGさんの言われる方法を取ります。
後から使用することを考えたら、本道的じゃないかと。
KG様、T★M様
なるほど、そちらの方が確かに後々のことを考えると便利そうですね。
任意の文字列をキーとして同時にCollectionに格納すれば、
それで個別にも受け取れるでしょうから。
勉強になります。ありがとうございます。
ツイート | ![]() |