VB のたまご

作成日: 2017/03/05, 更新日: 2017/03/05



RadioButton

    イメージ
  •  RadioButton は、複数の選択肢(RadioButton を複数使用)から1つ決定するための機能を提供するコントロールです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「RadioButtonWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="RadioButtonWindow1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="RadioButtonWindow1" Height="300" Width="300">
    
        <Grid>
    
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
    
            <StackPanel Margin="10" Grid.Row="0">
                <RadioButton Content="オン" IsChecked="True" />
                <RadioButton Content="オフ" IsChecked="False" />
                <RadioButton Content="未選択" IsChecked="{x:Null}" IsThreeState="True" />
            </StackPanel>
    
            <StackPanel Margin="10" Grid.Row="1">
                <RadioButton Content="オン" IsChecked="True" />
                <RadioButton Content="オフ" IsChecked="False" />
                <RadioButton Content="未選択" IsChecked="{x:Null}" IsThreeState="True" />
            </StackPanel>
            
        </Grid>
        
    </Window>
    

  •  RadioButton は、下地にある他の RadioButton を対象にチェック状態を管理するので、1つの下地を対象に1つチェックを付けることができます。 実際に動かしてチェックを付けてみるのが一番わかりやすいです。

  • スポンサーリンク


  •  今度は主なイベントを見てみます。チェックが付いた/外れた/未選択、の切り替えタイミングで発生するイベントは、 Checked, Unchecked, Indeterminate イベントに分かれています。CheckedChanged イベントでまとめて処理ではないところに注意です。

  • <Window x:Class="RadioButtonWindow2"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="RadioButtonWindow2" Height="300" Width="300">
    
        <Grid>
    
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
    
            <StackPanel Margin="10" Grid.Row="0">
                <RadioButton Content="オン" IsChecked="True"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                <RadioButton Content="オフ" IsChecked="False"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                <RadioButton Content="未選択" IsChecked="{x:Null}" IsThreeState="True"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
            </StackPanel>
    
            <StackPanel Margin="10" Grid.Row="1">
                <RadioButton Content="オン" IsChecked="True"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                <RadioButton Content="オフ" IsChecked="False"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                <RadioButton Content="未選択" IsChecked="{x:Null}" IsThreeState="True"
                             Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
            </StackPanel>
    
        </Grid>
    
    </Window>
    

    Public Class RadioButtonWindow2
    
        Private Sub Checked(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"チェックが付いた")
    
        End Sub
    
        Private Sub Unchecked(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"チェックが外れた")
    
        End Sub
    
        Private Sub Indeterminate(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"未選択")
    
        End Sub
    
    End Class
    

  •  CheckBox の時と同じですね。 続いては、グループ化です。下地による範囲制限とは別に、RadioButton にグループ名を割り当てることで、同じグループ内での範囲に制限することができます。

  • <Window x:Class="RadioButtonWindow3"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:z04_NormalControls"
            mc:Ignorable="d"
            Title="RadioButtonWindow3" Height="400" Width="300">
    
        <WrapPanel>
    
            <StackPanel Margin="10" Background="AliceBlue">
                <RadioButton Content="no group" />
                <RadioButton Content="no group" />
                <RadioButton Content="no group" />
                <RadioButton Content="no group" />
                <RadioButton Content="no group" />
            </StackPanel>
    
            <StackPanel Margin="10" Background="AliceBlue">
                <RadioButton Content="group1" GroupName="group1" />
                <RadioButton Content="group1" GroupName="group1" />
                <RadioButton Content="group2" GroupName="group2" />
                <RadioButton Content="group2" GroupName="group2" />
                <RadioButton Content="group2" GroupName="group2" />
            </StackPanel>
    
            <StackPanel Margin="10" Background="AntiqueWhite">
                <RadioButton Content="group3" GroupName="group3" />
                <RadioButton Content="group3" GroupName="group3" />
                <RadioButton Content="group4" GroupName="group4" />
                <RadioButton Content="group4" GroupName="group4" />
                <RadioButton Content="group4" GroupName="group4" />
            </StackPanel>
    
            <StackPanel Margin="10" Background="AntiqueWhite">
                <RadioButton Content="group3" GroupName="group3" />
                <RadioButton Content="group3" GroupName="group3" />
                <RadioButton Content="group4" GroupName="group4" />
                <RadioButton Content="group4" GroupName="group4" />
                <RadioButton Content="group4" GroupName="group4" />
            </StackPanel>
            
        </WrapPanel>
    
    </Window>
    

  •  このサンプルでは、4つサンプルを載せています。青枠が成功例、赤枠が失敗例です。 1つ目は、パネルの下地あり、グループ化無しです。よって、この中では1つ選択することができます。 2つ目は、パネルの下地あり、2グループ化です。よって、この中では2つ選択することができます。 3つ目は、パネルの下地あり、2グループ化です。よって、この中では2つ選択することができます。 4つ目も、パネルの下地あり、2グループ化です。よって、この中では2つ選択することができます。

  •  上から順に確認していきます。すると4つ目の RadioButton をチェックしたタイミングで、 3つ目でチェックした RadioButton のチェックが外れてしまいます。

  •  このことからグループ化は下地を超えて機能することが分かります。複数選択させたい場合は注意が必要です。