Auteur de questions
Cambiar foco entre controles con la tecla "Enter"

Question
-
He encontrado un codigo muy bueno en el foro pero tengo dos problemas con el mismo, uno es que resuena el beep que tiene por default en el event keypress , mi otro problema es que mi form tiene varios tabpages y llegado a la parte inferior derecha(ultimo control de cada tabpage) hay un boton "siguiente" que basicamente pasa al siguiente tabpage y coloca el foco en el primer control de dicho tabpage, la cuesion es que el codigo q posteare a continuacion(lo encontre aqui en el foro) funciona bien hasta llegar al penultimo control o sea uno antes del boton "siguiente",cuestion que cuando doy enter en este penultimo control, pasa al boton y se genera el event click_button automaticamente sin que yo lo haya "clickeado", lo que yo pretendo es que el foco se quede en el boton pero que no se "clickee" automaticamente, espero haberme explicado bien, paso el codigo a continuacion
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean If (keyData = Keys.Return) Then ' Desplazar el foco entre los distintos controles ' mediante la tecla Return. El código está basado en un ' ejemplo de Francesco Balena. ' ' Iniciar todos los controles seleccionados actualmente. ' Dim ctrl As Control = Me.ActiveControl ' Si el control DataGridView contiene el foco ' abandonamos el procedimiento. ' If (TypeOf ctrl Is DataGridView) Or (TypeOf Me.GetNextControl(ctrl, True) Is Button) Then Return MyBase.ProcessCmdKey(msg, keyData) End If Do ' Obtener el siguiente control hacia delante en el ' orden de tabulación. ctrl = Me.GetNextControl(ctrl, True) ' GetNextControl(ctrl, False) puede devolver Nothing si ' es el primer control. If (Not (ctrl Is Nothing) AndAlso (ctrl.CanFocus)) Then ' Si el control puede recibir el foco, se lo doy. ctrl.Focus() Exit Do End If Loop End If Return MyBase.ProcessCmdKey(msg, keyData) End Function
y el siguiente es del boton "Siguiente"
Private Sub Button3_Click_1(sender As Object, e As EventArgs) Handles Button3.Click TabControl1.SelectedTab = TabHogar TextBox28.Focus() End Sub
Muchas gracias
Toutes les réponses
-
-
No se si es muy adecuado colocar enter para pasar de controles, pero lo que veo es que el codigo indica en distintas lineas la ejecución de keys.Data cuando el proximo control es un buton efectua el foco y luego al final del código vuelve a ejecutar, esto provoca, al ser enter que se dispare lo que tenga el button
()...... If (TypeOf ctrl Is DataGridView) Or (TypeOf Me.GetNextControl(ctrl, True) Is Button) Then Return MyBase.ProcessCmdKey(msg, keyData) End If....()
y al final del código
()....... End If Return MyBase.ProcessCmdKey(msg, keyData) End Function
ARA San Juan 44 HEROES ‗‗‗‗|||||‗‗‗‗‗
- Proposé comme réponse Pablo Rubio mercredi 25 septembre 2019 18:46
-
-