• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
noname#187541
noname#187541
回答No.3

こんにちは。 コントロールを配列で管理する方法もあります。 コントロールを配列で管理する http://vbdotnet.fc2web.com/vbnet/control/Control02.htm ここが参考になります。 上記の配列に格納する部分ですが、100個もやるのは大変なので For I = 0 To 99 btnArray(I) = Me.Controls("Button" & I) Next とするといいでしょう。(ボタン名は変更していないとします。) それから、イベントハンドルの登録をこのループに入れるといいでしょう。 どうでしょうか。

sineminna
質問者

補足

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

その他の回答 (2)

回答No.2

ちょっとだけ簡単に (コードはボタン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

sineminna
質問者

お礼

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

回答No.1

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

sineminna
質問者

補足

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

関連するQ&A