- ベストアンサー
【VB】もっと簡単に書けないかな?
お世話になっております。VB2005を最近かじりました。 フォーム上にボタンが100個ほど並んでいます。 グローバル変数としてboolean型のフラグを立てて、 ボタンを押したらボタンの色がピンクに、もう一度押したら元の色にという ごく簡単なプログラムを書きたいのですが、 1個のボタンごとに Private Flag as Boolean Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Select Case Flag Case False Button1.BackColor = Color.Pink Flag = True Case True Button1.BackColor = Color.FromKnownColor(KnownColor.ControlLight) Flag = False End Select End Sub というプログラムを書くと100個同じようなプログラムを書かなくてはいけなくなり、大変手間がかかりメンテも大変です。 もっと簡単にする方法があったら教えていただきたく存じます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 コントロールを配列で管理する方法もあります。 コントロールを配列で管理する http://vbdotnet.fc2web.com/vbnet/control/Control02.htm ここが参考になります。 上記の配列に格納する部分ですが、100個もやるのは大変なので For I = 0 To 99 btnArray(I) = Me.Controls("Button" & I) Next とするといいでしょう。(ボタン名は変更していないとします。) それから、イベントハンドルの登録をこのループに入れるといいでしょう。 どうでしょうか。
その他の回答 (2)
- himadakarane
- ベストアンサー率35% (27/76)
ちょっとだけ簡単に (コードはボタン2個です) Private Flag(2) As Boolean Private Sub Buttons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click Dim btn As Button Dim strNo As String Dim iNo As Integer btn = CType(sender, Button) 'イベント発生元のボタン情報を取得 strNo = Microsoft.VisualBasic.Mid(btn.Name, 7) iNo = CInt(strNo) Select Case Flag(iNo) Case False btn.BackColor = Color.Pink Flag(iNo) = True Case True btn.BackColor = Color.FromKnownColor(KnownColor.ControlLight) Flag(iNo) = False End Select End Sub
お礼
お礼が遅れて申し訳ありません。 参考になりましたありがとうございました。
- temtecomai2
- ベストアンサー率61% (656/1071)
とりあえず質問文のコードから解釈し、Flag 変数は全てのボタンで共有する理解で。 簡単に済ますなら全てのボタンの Click イベントを 1つのプロシージャに関連付けちゃう。 Private Sub Button_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click って行の Handles から後ろを Handles Button1.Click, Button2.Click, Button3.Click ・・・ Button100.Click とする。 次にボタンの色を変えているところを CType(sender, System.Windows.Forms.Button).BackColor = Color.Pink のようにする。 って線でどうでしょうか?
補足
なるほど!! 早速家帰って試してみます。また改めてお礼を言います。 ありがとうございました!!
補足
なるほど! 大変参考になりました。 またお礼します!