文字を入力して項目を選択する

スポンサーリンク

本 Tips は WPFのみとなります。

ComboBox では IsEditable プロパティに True をセットすると、テキストボックスを表示させることができます。

このテキストボックスに文字を入力すると、ComboBox 内の文字を選択することができるようになります。

IsEditable プロパティを使用する場合は、IsReadOnly プロパティの値によって挙動が異なりますので注意してください。

 

IsEditable プロパティと IsReadOnly プロパティの関係  IsReadOnly = TrueIsReadOnly = False IsEditable = True

  • 文字を入力して項目を選択できない
  • 項目に対応しない文字を入力できない
  • テキストボックス内の文字の一部を選択できる
  • テキストボックス内の文字をコピーできるが貼り付けできない
  • 文字を入力して項目を選択できる
  • 項目に対応しない文字を入力できる
  • テキストボックス内の文字の一部を選択できる
  • テキストボックス内の文字のコピーと貼り付けができる

IsEditable = False

  • 文字を入力して項目を選択できる
  • 項目に対応しない文字を入力できない
  • テキストボックス内の文字の一部を選択できない
  • テキストボックス内の文字をコピーまたは貼り付けできない
  • 文字を入力して項目を選択できる
  • 項目に対応しない文字を入力できない
  • テキストボックス内の文字の一部を選択できない
  • テキストボックス内の文字をコピーまたは貼り付けできない

下記は ComboBox コントロールにテキストボックスを表示し、文字で項目を選択できるようにする例です。

[選択項目を取得]ボタンをクリックすることで、入力した文字で項目を選択できているかどうかを確認することができます。

文字を入力して項目を選択する例

XAMLの例

<ComboBox IsEditable="True"
          IsReadOnly="False">
    <ComboBoxItem>リンゴ</ComboBoxItem>
    <ComboBoxItem>ミカン</ComboBoxItem>
    <ComboBoxItem>バナナ</ComboBoxItem>
    <ComboBoxItem>パイナップル</ComboBoxItem>
    <ComboBoxItem>スイカ</ComboBoxItem>
    <ComboBoxItem>グレープフルーツ</ComboBoxItem>
</ComboBox>

VBの例

ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    '文字を入力して項目を選択できるようにする
    ComboBox1.IsEditable = True
    ComboBox1.IsReadOnly = False
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
    If ComboBox1.SelectedItem Is Nothing Then
        MessageBox.Show("選択されている項目はありません")
    Else
        '選択されている項目を表示
        MessageBox.Show(DirectCast(ComboBox1.SelectedItem, ComboBoxItem).Content.ToString())
    End If
End Sub

C#の例

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    // 文字を入力して項目を選択できるようにする
    comboBox1.IsEditable = true;
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    if (comboBox1.SelectedItem == null)
        MessageBox.Show("選択されている項目はありません");
    else
        // 選択されている項目を表示
        MessageBox.Show(((ComboBoxItem)comboBox1.SelectedItem).Content.ToString());
}
タイトルとURLをコピーしました