none
WPF ComboBox.IsDropDownOpenプロパティーがコントロールできない RRS feed

  • 質問


  • 下記の様にして、TextBoxにフォーカスがある時にEnterキーを押すとComboBox1にフォーカスが移動するようにしたのですが、 Me.ComboBox1.IsDropDownOpen = Trueとしてもドロップダウンリストが開きません。
    TABキーでは正常にドロップダウンリストが開きます。
    Enterキーの押下でドロップダウンリストを開くには、どうしたら良いのか教えて下さい。

    Windows7 + VS2010です。

    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid Name="mygrid">
            <TextBox Height="35" HorizontalAlignment="Left" Margin="151,57,0,0" Name="TextBox1" VerticalAlignment="Top" Width="143" TabIndex="1" />
            <ComboBox Height="33" HorizontalAlignment="Left" Margin="122,117,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="177" IsEditable="True" TabIndex="2">
                <ComboBoxItem Content="000" />
                <ComboBoxItem Content="111" />

            </ComboBox>
        </Grid>
    </Window>

    ------
    ’コード

    Class MainWindow

        Private Sub mygrid_PreviewKeyDown(sender As Object, e As System.Windows.Input.KeyEventArgs) Handles mygrid.PreviewKeyDown

            Dim fr As FrameworkElement
            fr = DirectCast(e.Source, FrameworkElement)

                If e.Key = Key.Enter Then

                    If fr.Name = "TextBox1" Then
                        Me.ComboBox1.Focus()
                    End If

                End If

        End Sub


        Private Sub ComboBox1_GotFocus(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles ComboBox1.GotFocus
            Me.ComboBox1.IsDropDownOpen = True
        Debug.Print("Opened")    'これは常に表示される

        End Sub
    End Class
    2016年9月27日 3:30

回答

  • #間違えてテスト用のアカウントで投稿してしまったので貼り直し

    フォーカスと移動させた後に元のTextBoxでイベントが処理されてしまうので、処理されないようにします。

    Private Sub mygrid_PreviewKeyDown(sender As Object, e As System.Windows.Input.KeyEventArgs) Handles mygrid.PreviewKeyDown
    
        Dim fr As FrameworkElement
        fr = DirectCast(e.Source, FrameworkElement)
    
        If e.Key = Key.Enter Then
            If fr.Name = "TextBox1" Then
                Me.ComboBox1.Focus()
                e.Handled = True '他の処理をさせないように
            End If
        End If
    
    End Sub

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2016年9月27日 4:01

すべての返信

  • #間違えてテスト用のアカウントで投稿してしまったので貼り直し

    フォーカスと移動させた後に元のTextBoxでイベントが処理されてしまうので、処理されないようにします。

    Private Sub mygrid_PreviewKeyDown(sender As Object, e As System.Windows.Input.KeyEventArgs) Handles mygrid.PreviewKeyDown
    
        Dim fr As FrameworkElement
        fr = DirectCast(e.Source, FrameworkElement)
    
        If e.Key = Key.Enter Then
            If fr.Name = "TextBox1" Then
                Me.ComboBox1.Focus()
                e.Handled = True '他の処理をさせないように
            End If
        End If
    
    End Sub

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2016年9月27日 4:01
  • gekkaさん、いつも御回答ありがとうございます。正常に動作しました。

    WPFについては今までに何度も質問させていただいておりますが、開発中に同じような疑問が発生した場合は、過去の皆さんの回答を読んで解決に努めています。自分でもミスに陥り易いポイントの傾向が掴めてきており、このフォーラムが益々役に立っていると思います。今後もよろしくお願い致します。

    2016年9月27日 6:37