2014-11-25 4 views
0

Этого комбинированного список KeyDown событиеКак я могу назвать KeyDown события, передавая аргументы, Winforms Vb.net

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown 
     If e.KeyCode = Keys.Enter Then 
      TextBox2.Text = ComboBox1.Text 
      TextBox2.Focus() 
     End If 
    End Sub 

Я хотел бы, чтобы вызвать то же событие из combobox_leave пропускания «введите ключ» Я сделал, как следует, но не работает, как это сделать?

Private Sub ComboBox1_Leave(sender As Object, e As EventArgs) Handles ComboBox1.Leave 
    ComboBox1_KeyDown(Me, Keys.Enter) 
End Sub 
+0

@ user17777733 попытаться извлечь процесс из KeyDown события – DevEstacion

+0

Просто любопытно, почему вы хотите, чтобы наказать своих пользователей с нестандартным поведением их клавиатуры? После первого удивления они будут злиться на вас, когда обнаруживают, что вы не позволяете сосредоточить внимание на другом контроле. Мой совет: если у вас нет действительно уважительной причины, не путайте с обработчиком системной клавиатуры и событиями фокуса – Steve

ответ

0

Почему бы не просто извлечь метод из реального события?

Private Sub ComboBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ComboBox1.KeyDown 
    performAction(e.KeyCode); 
End Sub 

Private Sub performAction(e as Keys) 
    If e = Keys.Enter Then 
     TextBox2.Text = ComboBox1.Text 
     TextBox2.Focus() 
    End If 
End Sub 

Private Sub ComboBox1_Leave(sender As Object, e As EventArgs) Handles ComboBox1.Leave 
    performAction(Keys.Enter); 
End Sub 
+0

спасибо, можно убрать полуколону и добавить конец юга, его VB ... :) – user1777733

+0

Я решил свою проблему , не может достичь этого, используя отдельную подпрограмму? – user1777733

+0

@ user1777733 вы можете достичь того, чего вы изначально хотели, но это было бы слишком сложно, чем просто вызвать его из другого метода. – DevEstacion

0

Вы также можете использовать SendKeys.Send метод

Когда пользователь покидает COMBOBOX (как в вашем примере),

Вы можете установить обратно Фокус на выпадающий список

, а затем используйте SendKeys.Send("{ENTER}") для запуска ввода ключа.

так же, как это:

Private Sub ComboBox1_Leave(sender As Object, e As EventArgs) Handles ComboBox1.Leave 

     ComboBox1.Focus() 
     SendKeys.Send("{ENTER}") 
End Sub 

Однако это не позволяет пользователям фокусировки к другому компоненту. Чтобы этого избежать, вы можете использовать if statement, если пользователь нажимает или фокусируется на другом компоненте после фокусировки на выпадающем списке, пользователь все равно может «оставить» выпадающий список.

Ваш подход нецелесообразен, и это приводит к недоразумению в части пользователя.

0

попробовать это:

Private Sub ComboBox1_KeyDown(sender As Object, e As 
keyEventArgs) Handles ComboBox1.KeyDown 
    Dim _KeyCode As Short 
    If e Is Nothing Then 
     _KeyCode = 13 
    Else 
     _KeyCode = Keys.Enter 
    End If 

    If _KeyCode = Keys.Enter Then 
     TextBox2.Text = ComboBox1.Text 
     TextBox2.Focus() 
    End If 
End Sub 

Private Sub ComboBox1_Leave(sender As Object, e As EventArgs) 
Handles ComboBox1.Leave 
Dim keypress As System.Windows.Forms.KeyPressEventArgs 
    ComboBox1_KeyDown(sender, keypress) 
End Sub 
Смежные вопросы