- ベストアンサー
VB.NET2003を利用した配列コントロールの操作方法
- VB.NET2003を利用して配列を利用したコントロールを操作する方法について解説しています。
- 配列を利用したコントロールの配置と位置の変更方法について説明しています。
- 同一配列番号のコントロールのプロパティを操作する方法について詳しく説明しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
もし、配列のインデックスを使う方法でやりたいのであれば、 myCombo.Tag = myButton とやっているところで、ボタンではなく myCombo.Tag = i のように配列のインデックスになる数値を入れておいて、 イベントハンドラのメソッドの中で、ボタンにキャストするのではなくて整数にキャストすれば得られます。 Dim btnTag As Button btnTag = CType(objTag, Button) のところを Dim intIdx As Integer intIdx = CInt(objTag) とでも変えていただければ、Tagに入れた数値が得られます。 私の書いたコードだとコントロールをフィールドに宣言していないですが、質問内容にあるURLのページのようにフィールドに宣言しておけば大丈夫ですね。
その他の回答 (2)
- supersonic
- ベストアンサー率52% (57/109)
まず誤解していらっしゃるのは、Nameプロパティは変数名ではなく、単なる文字列です。Visual Studioのデザイナで設定すると同じ名前の変数を作ってくれるというだけです。 " Windows フォーム デザイナで生成されたコード "ってところを覗くと、勝手に書いてくれているのがわかりますよ。 本題ですが、Tagには、自分で好きなものを格納しておけます。なので、今回はこれを利用すると楽かなと思った次第です。 具体的にコードを書いてみましょうか? 以下はコンボボックスのTagにボタンそのものを入れておく方法です。 (インデントは全角のスペースですので注意を) 'フォームのロードイベントの中でコントロールを作ります。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '10個ずつコンボボックスとボタンを作ります。 For i As Integer = 0 To 9 'コンボとボタンを生成 Dim myCombo As New ComboBox Dim myButton As New Button myCombo.Tag = myButton 'コンボボックスのTagに対応するボタンの参照を入れておく 'ここで表示する座標等をプロパティにセットしますが、省略です '生成したコントロールにイベントハンドラを設定します 'コンボボックスのSelectedIndexChangedで 下に書いてあるComboEventメソッドが呼ばれるようにします AddHandler myCombo.SelectedIndexChanged, AddressOf ComboEvent '生成したコントロールをフォームに追加します Me.Controls.Add(myCombo) Me.Controls.Add(myButton) Next End Sub 'AddHandlerでイベントハンドラにしたメソッドです Private Sub ComboEvent(ByVal sender As Object, ByVal e As System.EventArgs) 'senderにイベントを発生させたオブジェクトが入っているので 'これをキャスト(コンボボックスのはずなので、ComboBox型へ) Dim cmbSender As ComboBox cmbSender = CType(sender, ComboBox) 'これのTagに対応するボタンをForm Loadで入れたので、取り出します Dim objTag As Object objTag = cmbSender.Tag 'ボタンを入れたのでButton型にキャスト Dim btnTag As Button btnTag = CType(objTag, Button) btnTag.Enabled = False 'ここで好きなように値を変えられます End Sub
- supersonic
- ベストアンサー率52% (57/109)
いろいろとやりようはあると思いますが、コンボボックスのTagプロパティを使うのが、簡単かと思いますがいかがでしょう? TagにはObjectを自由に格納しておけるので、コントロールを生成した直後にインデックスの数値を入れておくか、あるいは、対応するボタンそのものを格納しておくと良いと思います。 コンボボックスのイベントで、senderからそのTagを取得すれば済みます。
お礼
ご回答ありがとうございます 色々やってみたのですが始めたてで技術不足なところがありうまくいきませんでした 補足質問させていただきますのでよろしくお願いします
補足
まず、一部訂正がございます [ボタン]の左の数字はコンボボックスと同じように1ずつ増加します またこの数字は配列番号をあらわしているつもりです 色々試してみたところ コントロールを配置したプロシージャ以外でどのようにコントロールのプロパティを変更したらいいのか分からないことに気がつきました。 ボタンを設置する際に Me.Butt(i).Name = "Bu" & i.ToString() と記述しているのですが、Butt(i)でもBu(i)でもどちらもボタンのプロパティを変えることができません。 例:Butt(1).text="押して" Bu(1).text="押して" どちらもテキストを変えることができませんでした。 どのようにしたら他のプロシージャからプロパティが変えられるようにできるのでしょうか? *tagプロパティについても色々調べているのですが、わかる具体例を見つけることができず(見つかっても理解できませんでした)どのように利用したらいいのかわからない状態です