Перейти к основному контенту
Центр разработки для Windows

 none
Cambiar foco entre controles con la tecla "Enter" RRS feed

  • Вопрос

  • 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

    20 сентября 2019 г. 15:19

Все ответы

  • alguna idea?
    23 сентября 2019 г. 3:16
  • 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     ‗‗‗‗­|||||‗‗‗‗‗

    • Предложено в качестве ответа Pablo Rubio 25 сентября 2019 г. 18:46
    23 сентября 2019 г. 10:30
  • si tienes razón, lo cambie pero de todos modos tiene el mismo resultado, tratare de buscar otro código nomas porque no hay caso
    23 сентября 2019 г. 12:43
  • Ok, pero de todas formas que es lo que quieres lograr, tal vez encontremos otro método


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    23 сентября 2019 г. 13:18