VB のたまご

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



ComboBox

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

  • スポンサーリンク


    <Window x:Class="ComboBoxWindow1"
            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="ComboBoxWindow1" Height="300" Width="300">
        
        <Grid>
    
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
    
            <ComboBox Width="120" Height="30" Text="好きな食べ物"
                      SelectedIndex="0" Grid.Row="0">
                <ComboBoxItem Content="牛丼" />
                <ComboBoxItem Content="天丼" />
                <ComboBoxItem Content="親子丼" />
            </ComboBox>
    
            <ComboBox Width="120" Height="30" Text="好きな食べ物"
                      IsEditable="True" Grid.Row="1">
                <ComboBoxItem Content="牛丼" />
                <ComboBoxItem Content="天丼" />
                <ComboBoxItem Content="親子丼" />
            </ComboBox>
    
            <ComboBox Width="120" Height="30" Text="好きな食べ物"
                      IsEditable="True" IsReadOnly="True" Grid.Row="2">
                <ComboBoxItem Content="牛丼" />
                <ComboBoxItem Content="天丼" />
                <ComboBoxItem Content="親子丼" />
            </ComboBox>
    
        </Grid>
        
    </Window>
    

  •  3つ ComboBox を用意しました。 1つ目は選択のみ、2つ目は選択とは別に表示文字列と編集可能モードで、3つ目は選択とは別に表示文字列と編集不可能モード(2つ目かつ編集不可能)となります。

  • スポンサーリンク


  •  続いてイベントです。選択項目を切り替えた時に発生する SelectionChanged イベントの例を以下に記載します。

  • <Window x:Class="ComboBoxWindow2"
            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="ComboBoxWindow2" Height="300" Width="300">
        
        <Grid>
    
            <ComboBox Width="120" Height="30" SelectedIndex="0" SelectionChanged="SelectionChanged">
                <ComboBoxItem Content="牛丼" />
                <ComboBoxItem Content="天丼" />
                <ComboBoxItem Content="親子丼" />
            </ComboBox>
            
        </Grid>
        
    </Window>
    

    Public Class ComboBoxWindow2
    
        Private Sub SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
    
            ' Remove は、変更前の選択項目
            If 0 < e.RemovedItems.Count Then
                Dim subCtrl = CType(e.RemovedItems(0), ComboBoxItem)
                Console.WriteLine($"")
                Console.WriteLine($"{subCtrl.Content} remove.")
            End If
    
            ' Add は、変更後の選択項目
            If 0 < e.AddedItems.Count Then
                Dim subCtrl = CType(e.AddedItems(0), ComboBoxItem)
                Console.WriteLine($"{subCtrl.Content} add.")
            End If
    
        End Sub
    
    End Class
    

  •  ちょっと脱線しますが、ComboBox コントロールに名前を付けていないですが、WPF ではイベント定義することができるんですね。 SelectionChanged イベントの引数からは、変更前と変更後の値を取得することができます。これを使って、変更した値を調べています。