トップ回答者
WPF ComboBox.IsDropDownOpenプロパティーがコントロールできない

質問
-
下記の様にして、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
回答
-
#間違えてテスト用のアカウントで投稿してしまったので貼り直し
フォーカスと移動させた後に元の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!)
- 回答の候補に設定 いわさ Tak1waMVP, Moderator 2016年9月27日 4:25
- 回答としてマーク huahi11112 2016年9月27日 6: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!)
- 回答の候補に設定 いわさ Tak1waMVP, Moderator 2016年9月27日 4:25
- 回答としてマーク huahi11112 2016年9月27日 6:30