VB のたまご

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



CheckBox

    イメージ
  •  CheckBox は、ユーザーの意思選択を表現するコントロールです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「CheckWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="CheckBoxWindow1"
            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="CheckBoxWindow1" Height="300" Width="300">
    
        <Grid>
    
            <GroupBox Header="groupbox1" Margin="10">
                <StackPanel Margin="10">
                    <CheckBox Content="true/false, true" IsChecked="True" />
                    <CheckBox Content="true/false, false" IsChecked="False" />
                    <CheckBox Content="3状態(true/false/null)" IsChecked="{x:Null}" IsThreeState="True" />
                </StackPanel>
            </GroupBox>
    
        </Grid>
    
    </Window>
    

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

  • <Window x:Class="CheckBoxWindow2"
            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="CheckBoxWindow2" Height="300" Width="300">
    
        <Grid>
    
            <GroupBox Header="groupbox1" Margin="10">
                <StackPanel Margin="10">
                    <CheckBox Name="checkbox1" Content="3状態(true/false/null)" IsChecked="{x:Null}" IsThreeState="True"
                              Checked="checkbox1_Checked" Unchecked="checkbox1_Unchecked" Indeterminate="checkbox1_Indeterminate" />
                </StackPanel>
            </GroupBox>
    
        </Grid>
    
    </Window>
    

    Public Class CheckBoxWindow2
    
        Private Sub checkbox1_Checked(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"チェックが付いた")
    
        End Sub
    
        Private Sub checkbox1_Unchecked(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"チェックが外れた")
    
        End Sub
    
        Private Sub checkbox1_Indeterminate(sender As Object, e As RoutedEventArgs)
    
            Console.WriteLine($"未選択")
    
        End Sub
    
    End Class
    

    スポンサーリンク


  •  それでは少し工夫して、複数の CheckBox コントロールを、共通のイベントハンドラでまとめて処理するサンプルです。

  • <Window x:Class="CheckBoxWindow3"
            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="CheckBoxWindow3" Height="300" Width="300">
    
        <Grid>
    
            <GroupBox Header="groupbox1" Margin="10">
                <StackPanel Margin="10">
                    
                    <CheckBox Name="checkbox1" Content="true/false, true" IsChecked="True" 
                              Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                    
                    <CheckBox Name="checkbox2" Content="true/false, false" IsChecked="False" 
                              Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                    
                    <CheckBox Name="checkbox3" Content="3状態(true/false/null)" IsChecked="{x:Null}" IsThreeState="True"
                              Checked="Checked" Unchecked="Unchecked" Indeterminate="Indeterminate" />
                    
                </StackPanel>
            </GroupBox>
    
        </Grid>
    
    </Window>
    

    Public Class CheckBoxWindow3
    
        Private Sub Checked(sender As Object, e As RoutedEventArgs)
    
            Dim controlName = CType(e.Source, CheckBox).Name
            Console.WriteLine($"{controlName} チェックが付いた")
    
        End Sub
    
        Private Sub Unchecked(sender As Object, e As RoutedEventArgs)
    
            Dim controlName = CType(e.Source, CheckBox).Name
            Console.WriteLine($"{controlName} チェックが外れた")
    
        End Sub
    
        Private Sub Indeterminate(sender As Object, e As RoutedEventArgs)
    
            Dim controlName = CType(e.Source, CheckBox).Name
            Console.WriteLine($"{controlName} チェックは未選択")
    
        End Sub
    
    End Class