- 締切済み
VB.NET、テキストボックスを配列に
いつもこちらで質問させていただいています、今回も質問させていただきます Form2(計算表などの一覧表) combobox・textbox・buttomがあり、combobox1つとtextbox2つで一列とし、それが23行(1ページの限界)まで表示 Form4(Form2で出力項目を選ぶ時、textboxをクリックすると開く項目設定のページ) listbox・textbox・buttomがあり、listbox2つとbuttom2つで…buttomを押すと右の項目が左のlistboxに移るよう、また別のbuttomを押すと逆が起きる 今回はForm4の右のlistboxから選んだ項目と、名称がかかれたtextboxをForm2の各行のそれぞれのtextboxに入れたいのですがForm2で選択した項目にすでにテキストが入力されて、Form4のtextboxで名称変更しなかったときは、Form2のtextboxをclickした行に結果が表示されるのですが、Form2で選択した項目をForm4のtextboxで名称を変更した際、結果が上手く表示されずどうしたらいいのか分からずお知恵をお借りしたく質問させていただきました 名称が変更されない場合のForm4は(stritemは一度連結し格納するためです) if textbox1.text = form2.textbox1.text then form2.textbox1.text = textbox1.text for i = 0 to listbox1.selecteditems.count - 1 if stritem <> "" then stritem &= " + " end if stritem &= listbox1.selecteditems.item(i) next form2.textbox2.text = stritem となり、これを利用し名称が変更された時は配列で変更された箇所を特定し上記のコードでその位置に値を入れるとしたいのです 問題解決にForm2のtextboxを予めIndexで配列宣言すればいいといわれ、プロパティで出来ないかとやってみたのですが…Visual Studio 2005で上手く出来ませんでした そこでIndexでtextboxを予め配列宣言するにはどう設定、またはどう記述したらよいのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- K-Sogacchi
- ベストアンサー率53% (50/93)
うーん、いまいち状況が掴み辛いですが… とりあえず、VB.NETでは、VB6までで言うところの「オブジェクト配列」は 存在しませんので、デザイナのプロパティ設定ではオブジェクトを配列には出来ません。 やるのであれば、オブジェクトの配列を「コード内で」作成し、その各要素について 対応するTextBoxを参照するようにしましょう。 例えば… Public Class Form1 Public txt(22) As TextBox '23個なので0~22、これがオブジェクト配列の代わりになる Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load For Each ctl As Control In Me.Controls 'Form内のControlを調査 If ctl.GetType Is GetType(TextBox) Then 'TextBoxか? If ctl.Name.Substring(0, 7) = "textbox" Then '名前はtextbox... か? Dim i As Integer = CType(ctl.Name.Substring(7), Integer) '"textbox..." の "..."を取得 txt(i - 1) = DirectCast(ctl, TextBox) '念のためControlをTextBoxに変換してオブジェクト参照 'Option Strict Onだと、txt(i - 1) = ctl ではエラーとなる End If End If Next End Sub End Class …みたいな感じですかね。 最悪、オブジェクト参照のコードを23行並べても動くには動きますが… スマートじゃないですもんね。 あと、他のFormから参照するようですので、txt()はPublicで宣言しています。 余談ですが、提示されているコード、なんか変な気がします。 とりあえず、それについては置いておきますが…