WinForms Multiline Textbox, la tecla Enter insiste en mover el foco fuera del cuadro de texto

StackOverflow https://stackoverflow.com/questions/467656

Pregunta

Tengo un cuadro de texto multilínea y un botón debajo.

VB.NET, WinForms, .NET 2.0

System.Windows.Forms.Textbox

Multiline = True

AcceptsReturn = True

AcceptsTab = False

CausesValidation = False

Sin eventos codificados explícitamente.

Me gustaría que la tecla Intro inserte saltos de línea y nunca mueva el foco al siguiente control (el botón).

Me gustaría que la tecla Tab siempre mueva el foco al siguiente control en el orden de tabulación (el botón).

Lo que sucede en su lugar es que la tecla Intro inserta un avance de línea y luego mueve el foco al siguiente control (el botón). ¡También hace esto con Ctrl-Enter, lo que realmente me desconcierta!

Al leer los archivos de ayuda y buscar en Google, debería funcionar como lo necesito. Pero obviamente me estoy perdiendo algo. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución 3

Resulta que había olvidado que había hecho esto (a continuación) en otra parte en el mismo formulario:

'http://duncanmackenzie.net/blog/Enter-Instead-of-Tab/default.aspx
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Keys.Enter Then
        e.Handled = True
        Me.ProcessTabKey(Not e.Shift)
    Else
        e.Handled = False
        MyBase.OnKeyUp(e)
    End If
End Sub

Otros consejos

Un método que uso a menudo para este tipo de problema es sumar y restar iterativamente código hasta que pueda reducirlo a la única cosa que causó el problema.

Por ejemplo, puede comenzar haciendo un proyecto muy simple con solo un cuadro de edición y otro control, y ver qué hace. Si este código se comporta de la manera que desea, puede comenzar a agregar código poco a poco, acercando cada vez más el proyecto simple al producto final deseado, hasta que aparezca el error. Luego mire el último bit de código que agregó y vea si puede restar pedazos de eso hasta que el error desaparezca. Iterar esto varias veces podría ayudarlo a encontrar al culpable.

Alternativamente, puede comenzar con su código existente (mal comportamiento) y comenzar a simplificarlo hasta que el error desaparezca. Luego agrega de nuevo parte de lo último que eliminó e itera como se indica arriba.

Por último, en este caso también podría intentar agregar un controlador de eventos para el control de edición Dejar evento y poner un punto de interrupción en el controlador. Cuando llegue el BP, verifique la pila de llamadas y vea si puede hacerse una idea de qué código precipitó el cambio de enfoque. Para que esto funcione, su depurador probablemente deba configurarse para mostrar el código para el que no tiene fuente (es decir, deshabilite la opción Just My Code en el depurador). Incluso podría pegar una pila de llamada (recortada) en la pregunta si desea obtener la ayuda del grupo para descifrarla.

p.s. ¿Alguien tiene un nombre para el método de depuración iterativa descrito anteriormente? Si no es así, ¿puedo proponerle llamarlo Método de Newton (o tal vez Newtoning), ya que se parece al Método de Newton para encontrar iterativamente raíces de funciones matemáticas.

Definitivamente no debería hacer eso. Lo único que puedo pensar es que no tiene la altura suficiente para acomodar varias líneas. Intenta agregar ...

textBox1.ScrollBars = ScrollBars.Vertical

Si no, no lo sé. Intente crear un proyecto en blanco y crear un formulario con un cuadro de texto, un botón establezca las propiedades y vea qué sucede ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top