プロが教える店舗&オフィスのセキュリティ対策術

お世話になっております。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個同じようなプログラムを書かなくてはいけなくなり、大変手間がかかりメンテも大変です。
もっと簡単にする方法があったら教えていただきたく存じます。

A 回答 (3件)

こんにちは。



コントロールを配列で管理する方法もあります。

コントロールを配列で管理する
http://vbdotnet.fc2web.com/vbnet/control/Control …
ここが参考になります。

上記の配列に格納する部分ですが、100個もやるのは大変なので

For I = 0 To 99
btnArray(I) = Me.Controls("Button" & I)
Next

とするといいでしょう。(ボタン名は変更していないとします。)

それから、イベントハンドルの登録をこのループに入れるといいでしょう。

どうでしょうか。

この回答への補足

なるほど!
大変参考になりました。
またお礼します!

補足日時:2006/09/14 18:13
    • good
    • 0

ちょっとだけ簡単に


(コードはボタン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
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。
参考になりましたありがとうございました。

お礼日時:2006/10/10 13:47

とりあえず質問文のコードから解釈し、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
のようにする。
って線でどうでしょうか?

この回答への補足

なるほど!!
早速家帰って試してみます。また改めてお礼を言います。
ありがとうございました!!

補足日時:2006/09/14 18:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!