[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);
        }
    }
}

[Tips][RadioButton] チェックマークの位置を変更する

RadioButtonコントロールはチェックマークの配置位置を設定することができます。

配置位置の設定はCheckAlignプロパティContentAlignment列挙体のメンバを指定します。

ContentAlignment列挙体
メンバ名 説明
TopLeft 上端左寄せ
TopCenter 上端中央寄せ
TopRight 上端右寄せ
MiddleLeft 中段左寄せ
MiddleCenter 中段中央寄せ
MiddleRight 中段右寄せ
BottomLeft 下段左寄せ
BottomCenter 下段中央寄せ
BottmRight 下段右寄せ

下記は、RadioButtonコントロールのチェックマーク位置を設定する例です。

配置位置をわかりやすくするために、RadioButtonコントロールのAutoSizeをFalseに、背景色をActiveColorに設定しました。

VBの例

' フォームロード時の処理
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '★★★チェックマークの位置を変更する★★★
    RadioButton1.CheckAlign = ContentAlignment.TopLeft
    RadioButton2.CheckAlign = ContentAlignment.TopCenter
    RadioButton3.CheckAlign = ContentAlignment.TopRight
    RadioButton4.CheckAlign = ContentAlignment.MiddleLeft
    RadioButton5.CheckAlign = ContentAlignment.MiddleCenter
    RadioButton6.CheckAlign = ContentAlignment.MiddleRight
    RadioButton7.CheckAlign = ContentAlignment.BottomLeft
    RadioButton8.CheckAlign = ContentAlignment.BottomCenter
    RadioButton9.CheckAlign = ContentAlignment.BottomRight
End Sub

C#の例

// フォームロード時の処理
private void Form3_Load(object sender, EventArgs e)
{
    // ★★★チェックマークの位置を変更する★★★
    radioButton1.CheckAlign = ContentAlignment.TopLeft;
    radioButton2.CheckAlign = ContentAlignment.TopCenter;
    radioButton3.CheckAlign = ContentAlignment.TopRight;
    radioButton4.CheckAlign = ContentAlignment.MiddleLeft;
    radioButton5.CheckAlign = ContentAlignment.MiddleCenter;
    radioButton6.CheckAlign = ContentAlignment.MiddleRight;
    radioButton7.CheckAlign = ContentAlignment.BottomLeft;
    radioButton8.CheckAlign = ContentAlignment.BottomCenter;
    radioButton9.CheckAlign = ContentAlignment.BottomRight;
}

[Tips][RadioButton] チェック状態が変更されたことを知る

RadioButtonコントロールのチェック状態が変更されたことを知るには、CheckedChangedイベントを使用します。

下記はチェック状態が変更されたことを知る例です。

[男]または[女]というRadioButtonのチェック状態が変更されると、Labelコントロールにメッセージを表示します。

RadioButtonコントロール[男]のNameプロパティはrdoMale、[女]はrdoFemaleとしました。

rdoMaleおよびrdoFemaleはどちらもrdoSex_CheckedChangedというイベントを使用しています。

VBの例

' ラジオボタンのチェック状態変更時の処理
Private Sub rdoSex_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rdoMale.CheckedChanged, rdoFemale.CheckedChanged
    If rdoMale.Checked = True Then
        lblMsg.Text = "[男]がチェックされました"
    Else
        lblMsg.Text = "[女]がチェックされました"
    End If
End Sub

C#の例

// ラジオボタンのチェック状態変更時の処理
private void rdoSex_CheckedChanged(object sender, EventArgs e)
{
    if ( rdoMale.Checked == true )
        lblMsg.Text = "[男]がチェックされました";
    else
        lblMsg.Text = "[女]がチェックされました";
}