Mam kombobox w moim Userform. Chociaż to jest w centrum uwagi, chcę użyć klawiatury do kontroli WASD. Uważam jednak, że po naciśnięciu Wasd ComboBox wprowadza wartości rozpoczynające się od tych liter. Ponadto klawisze strzałek również jazda na rowerze opcje.

Czy tak jest, aby ograniczyć te polecenia?

Próbowałem

Tool.AutoCompleteMode = AutoCompleteMode.None

To się nie kończy. Czy ktoś ma jakieś wskazówki, jak mógłbym uzyskać dostęp do bardziej szczegółowych kontroli, aby zatrzymać tego rodzaju autofill?

0
Matthew Keracher 11 październik 2020, 22:19

1 odpowiedź

Najlepsza odpowiedź

Jeśli masz tylko sterowanie Combobox w formularzu i żadnych innych elementów sterujących wejściami, takimi jak textbox, możesz wypróbować następujący kod:

Ustaw e.Handled = True w zdarzeniu breoksa Combobox.

 Private Sub ComboBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub

Jeśli masz pewne elementy sterujące wejście, chcesz zachować funkcję edycji, a chcesz nie zakłócać zdarzenia breoksa formularza.

Możesz odnieść się do następujących kroków.
(1) Proszę ustawić Me.KeyPreview = False w zdarzeniu KeyDown każdej kontroli wejściowej.
(2) Ustaw e.Handled = True w zdarzeniu brelpress Combobox1.
(3) Po dwukrotnym kliknięciu formularza, aby wprowadzić WASD, możesz ustawić ComboBox1.Focus().

Przykładowy kod:

Public Class Form1
Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress      
    'edit  your code
    Dim offset As Integer = 10
    If e.KeyChar = "a" Then
        PictureBox1.Location = New Point(PictureBox1.Location.X - offset, PictureBox1.Location.Y)
    ElseIf e.KeyChar = "w" Then
        PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y - offset)
    ElseIf e.KeyChar = "s" Then
        PictureBox1.Location = New Point(PictureBox1.Location.X, PictureBox1.Location.Y + offset)
    ElseIf e.KeyChar = "d" Then
        PictureBox1.Location = New Point(PictureBox1.Location.X + offset, PictureBox1.Location.Y)
    End If
    e.Handled = True
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.KeyPreview = True
End Sub
Private Sub Form1_DoubleClick(sender As Object, e As EventArgs) Handles MyBase.DoubleClick
    ComboBox1.Focus()
    Me.KeyPreview = True
End Sub

Private Sub ComboBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub   

Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    Me.KeyPreview = False
End Sub

End Class

Wynik:

enter image description here

1
Arya Ding - MSFT 12 październik 2020, 06:26