[Tips][RadioButton] トグルボタンとして使用する

RadioButtonコントロールはトグルボタンとして使用することができます。

まず、外観をボタンにするためにAppearanceプロパティにAppearance.Buttonをセットします。

次に、AutoCheckプロパティにFalseを設定します。元がRadioButtonなので、フォーム内にほかのRadioButtonコントロールの動作から影響を受けないようにするためです。

では、押された状態と押されていない状態をどうやって作り出すかというと、RadioButtonのClickイベントを利用して作成します。

Clickされたときに、現在ボタンが押されていない状態であれば押された状態に、押された状態であれば押されていない状態にすれば良いことになります。

下記は、RadioButtonコントロールをトグルボタンとして利用する例です。

VBの例

' フォームロード時の処理
Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '★★★外観をボタンにする★★★
    RadioButton1.Appearance = Appearance.Button
    'チェックを自動で付けないようにする
    RadioButton1.AutoCheck = False
End Sub

' ボタンクリック時の処理
Private Sub RadioButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.Click
    '現在の状況に応じて押された状態/押されていない状態にする
    RadioButton1.Checked = Not RadioButton1.Checked
End Sub

C#の例

// フォームロード時の処理
private void Form5_Load(object sender, EventArgs e)
{
    // ★★★外観をボタンにする★★★
    radioButton1.Appearance = Appearance.Button;
    // チェックを自動で付けないようにする
    radioButton1.AutoCheck = false;
}

// ボタンクリック時の処理
private void radioButton1_Click(object sender, EventArgs e)
{
    // 現在の状況に応じて押された状態/押されていない状態にする
    radioButton1.Checked = !radioButton1.Checked;
}

[Tips][RadioButton] グループ化する

RadioButtonコントロールはGroupBoxやPnaelコントロール上に配置することでグループ化できます。

たとえばフォーム上に「性別」という選択肢と「メインで使用する開発言語」という選択肢をしようしたい場合は、グループ化する必要があります。

グループ化しなければ、フォームに配置したすべてのRadioButtonコントロールが同一グループと見なされますので注意が必要です。

下記は、GroupBoxコントロールを使用してグループ化する例です。

[選択状態を表示]ボタンがクリックされると、現在選択されているのがどの項目かを表すメッセージを表示します。

GroupBoxコントロールのControlsプロパティを参照し、どの項目がチェックされているのかを調べています。

VBの例

' [選択状態を表示]ボタンクリック時の処理
Private Sub btnShowMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnShowMsg.Click
    Dim msg As String = ""

    '性別(GroupBox1)の選択項目を取得
    For Each rdoSex As Windows.Forms.RadioButton In GroupBox1.Controls
        If rdoSex.Checked Then
            msg = "性別は " & rdoSex.Text & ControlChars.NewLine
            Exit For
        End If
    Next

    'メインで使用している言語(GroupBox2)の選択項目を取得
    For Each rdoLanguage As Windows.Forms.RadioButton In GroupBox2.Controls
        If rdoLanguage.Checked Then
            msg &= "メインで使用している言語は " & rdoLanguage.Text &
                ControlChars.NewLine & "が選択されています"
            Exit For
        End If
    Next

    'メッセージの表示
    MessageBox.Show(msg)
End Sub

C#の例

// [選択状態を表示]ボタンクリック時の処理
private void btnShowMsg_Click(object sender, EventArgs e)
{
    string msg = "";

    // 性別(GroupBox1)の選択項目を取得
    foreach (System.Windows.Forms.RadioButton rdoSex in groupBox1.Controls)
    {
        if ( rdoSex.Checked )
        {
            msg = "性別は " + rdoSex.Text + "\r\n";
            break;
        }
    }

    // メインで使用している言語(GroupBox2)の選択項目を取得
    foreach (System.Windows.Forms.RadioButton rdoLanguage in groupBox2.Controls)
    {
        if (rdoLanguage.Checked)
        {
            msg += "メインで使用している言語は " + rdoLanguage.Text + 
                "\r\nが選択されています";

            // メッセージの表示
            MessageBox.Show(msg);
        }
    }
}