15.選択肢によって変わるメッセージ(その3)-ラジオボタンのグループ分け
 

前回の続きです。

ラジオボタンを、選択の内容に応じてグループ分けします。

今まであった選択肢、朝・昼・夜を「時間」というグループにまとめましょう。
あとでグループを1つ追加するのでフォームの大きさを少し大きめにしておきます。フォームをクリックし現れた端の四角をドラッグして、縦を今までの倍ぐらいに、横を1まわりぐらい大きくして下さい。
「表示」ボタンを下の方に下げた上で、 ツールボックスから「コンテナ」>「GroupBox」を選択します。朝・昼・夜のラジオボタンの下でマウスをドラッグしてグループボックスを作成します。
そのグループボックスのプロパティは以下の通り。

  • (Name):grpTime
  • Text:時間

そして、朝・昼・夜のラジオボタンをグループボックスの上に移動し位置を調整すると下図のようになります。

時間グループボックスの作成

続いて人のグループボックスを作成します。
ツールボックスの「コンテナ」>「GroupBox」をクリックした後、フォーム上部の空いた部分をドラッグしてグループボックスを作成します。このグループボックスのプロパティを以下の通りとします。

  • (Name):grpHito
  • Text:人

この名前グループボックスの中にラジオボタンを3つ置きます。

1つ目のラジオボタン

  • (Name):optTaro
  • Text:太郎君

2つ目のラジオボタン

  • (Name):optHanako
  • Text:花子ちゃん

3つ目のラジオボタン

  • (Name):optJiro
  • Text:次郎君

これで以下のような画面になります。

人グループボックスを追加

次は、コードです。

まず、起動時に太郎君が選択されているようにします。起動時の処理ですのでForm_Loadを変更します。

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 optTaro.Checked = True
 optMorning.Checked = True
End Sub

上記のようにoptTaro.Checked = Trueを追加します。

次は人のグループボックスにあるラジオボタンが選択された時の処理を記述します。

選択された時の値を格納する変数を用意します。

'太郎君・花子ちゃん・次郎君の誰が選択されているかを番号で表す 太郎君-1、花子ちゃん-2、次郎君-3
Dim intHito As Integer = 1

というコードをintChkが書かれている傍に記載します。ちなみにintChk1のところで触れていませんでしたが、Public Class 〜のすぐ下の、Sub〜End Sub(別の機会に説明するFunction〜End Functionも含む)に囲まれてない部分は宣言部といって、ここでDimを使って使用宣言された変数はそのクラス内のどこでも使用可能かつ中味を保持します。
ですので、intHitoもintChkも変数内のどこでも使用できるわけです。

ラジオボタンも朝・昼・夜の時と同じ要領で作成します。

Private Sub optTaro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optTaro.Click
intHito = 1
End Sub

Private Sub optHanako_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optHanako.Click
intHito = 2
End Sub

Private Sub optJiro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optJiro.Click
intHito = 3
End Sub

最後に「表示」ボタンですが、ボタンを押した時に「太郎君、こんにちは」というように、名前と挨拶を表示したメッセージボックスを表示するようにしたいと思います。
前回はボタンを押したらすぐMessageBox.Showを発行していましたが、今回は名前と挨拶を組み合わせるため、それぞれを一旦変数に格納します。その上で組み合わせて表示をします。

Private Sub cmdMes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdMes.Click
 '人
 Dim strName As String = "" '(1)
 '挨拶
 Dim strGreeting As String = "" '(2)

 Select Case intHito '(3)
  Case 1
   strName = "太郎君"
  Case 2
   strName = "花子ちゃん"
  Case 3
   strName = "次郎君"
 End Select
 Select Case intChk '(4)
  Case 1
   strGreeting = "おはよう"
  Case 2
   strGreeting = "こんにちは"
  Case 3
   strGreeting = "こんばんは"
 End Select
 MessageBox.Show(strName & "、" & strGreeting) '(5)
End Sub

(1)、(2)が格納する変数です。
(3)で人グループボックス内で選択された値をもとに名前を変数に代入します。(4)は時間グループボックスでの処理です。
(3)、(4)で設定された値を(5)で表示します。ここまで追記し、多少コメントを加えたコードが以下です。

Public Class Form1

 '太郎君・花子ちゃん・次郎君の誰が選択されているかを番号で表す 太郎君-1、花子ちゃん-2、次郎君-3
 Dim intHito As Integer = 1
 '朝・昼・晩のどれが選択されているかを番号で表す 朝-1、昼-2、夜-3
 Dim intChk As Integer = 1

 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  optTaro.Checked = True
  optMorning.Checked = True
 End Sub

 Private Sub optMorning_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optMorning.Click
  intChk = 1
 End Sub

 Private Sub optNoon_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optNoon.Click
  intChk = 2
 End Sub

 Private Sub optNight_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optNight.Click
  intChk = 3
 End Sub

 Private Sub cmdMes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdMes.Click
  '人
  Dim strName As String = ""
  '挨拶
  Dim strGreeting As String = ""

  Select Case intHito
   Case 1
    strName = "太郎君"
   Case 2
    strName = "花子ちゃん"
   Case 3
    strName = "次郎君"
  End Select
  Select Case intChk
   Case 1
    strGreeting = "おはよう"
   Case 2
    strGreeting = "こんにちは"
   Case 3
    strGreeting = "こんばんは"
  End Select
  MessageBox.Show(strName & "、" & strGreeting)
 End Sub

 Private Sub optTaro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optTaro.Click
  intHito = 1
 End Sub

 Private Sub optHanako_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optHanako.Click
  intHito = 2
 End Sub

 Private Sub optJiro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles optJiro.Click
  intHito = 3
 End Sub
End Class

これを実行すると以下のように動作します。

次郎君と昼を選択
「表示」ボタン押下 ↓
次郎君、こんにちは

これで完成です。グループボックスは今回のようにラジオボタンの範囲を固定するだけでなく、フォームのデザインの1つとして用いられる場合もあります。世に出回っているソフトを見て、どのように使われてるか参考にするのもよいでしょう。