visual usar textbox1 poner net foco control como c# .net winforms controls focus

c# - usar - vb focus textbox



¿Cómo determinar qué control en la forma tiene enfoque? (4)

He leído en otro lugar aquí que para capturar el trazo "Enter" en un cuadro de texto y usarlo como si presionara un botón, debo establecer la propiedad KeyPreview del formulario en verdadero y verificar el valor de KeyDown.

Quiero poder utilizar esta funcionalidad en varios controles TextBox que están asociados con un Botón diferente.

Mi pregunta es ¿cómo sé qué control causó el evento KeyPress? El remitente aparece como el formulario en sí.

GRAMO



Cada formulario tiene una propiedad para un botón "Aceptar" y un botón "Cancelar", estos son los botones que se "presiona" cuando el usuario presiona ingresar y escapar, respectivamente.

Puede cambiar el botón predeterminado a medida que cada control obtiene el foco (puede hacer que uno obtenga el efecto de foco por botón y compartirlo con un conjunto de cuadros de texto)

Si hace esto, la apariencia de los botones cambia, dando al usuario una señal visual que le indica qué botón es el predeterminado.

Alternativamente, si no quiere hacer eso, puede usar la propiedad "ActiveControl" y probar para ver a cuál de los conjuntos de cuadros de texto pertenece.

¿Te has preguntado qué debería ser el botón predeterminado si no es uno de estos cuadros de texto?


Puede usar este código como punto de partida para capturar los eventos de tecla abajo del formulario. El ActiveControl es uno que tiene el foco. En este ejemplo, es flexible para agregar otras acciones en "Enter" cuando se encuentre en diferentes TextBoxes en el formulario. Es VB.NET, pero debería poder convertirlo fácilmente a C #.

Private Sub MyForm_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown If e.KeyCode = Keys.Enter Then If Me.ActiveControl.Name = Me.TextBox1.Name Then '' This is the TextBox we want to be active to run filterByDeviceSN() filterByDeviceSN() ElseIf Me.ActiveControl.Name = Me.TextBox2.Name Then foo() End If End If End Sub


Encontré una solución que parece estar funcionando.

private void DeviceForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 13 && tstxtDeviceFilter.Focused) { filterByDeviceSN(); } }

¡No puedo evitar pensar que debe haber una mejor manera!

--EDIT - EDITAR - EDITAR - EDITAR - EDITAR--

Bueno, después de mirar las sugerencias a continuación (gracias), he encontrado una manera "mejor" para mí en esta circunstancia.

this.tstxtDeviceFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tstxtDeviceFilter_KeyDown); private void tstxtDeviceFilter_KeyDown(object sender, KeyEventArgs e) { if (e.KeyValue == 13) { filterByDeviceSN(); } }

Obviamente atrapando el evento en el cuadro de texto en lugar de en el formulario, no necesito preocuparme por el enfoque. ¡Una vez más me siento tonto por no pensar en eso por tanto tiempo!