Pregunta

¿Hay alguna forma de desactivar la entrada de entradas de varias líneas en un cuadro de texto (es decir, me gustaría evitar que mis usuarios presionen Ctrl-Intro para obtener una nueva línea)?

¿Fue útil?

Solución

Pude hacerlo usando el evento KeyPress.Aquí está el ejemplo de código:

Private Sub SingleLineTextBox_ KeyPress(ByRef KeyAscii As Integer)
    If KeyAscii = 10 _
        or KeyAscii = 13 Then
            '10 -> Ctrl-Enter. AKA ^J or ctrl-j
            '13 -> Enter.      AKA ^M or ctrl-m
        KeyAscii = 0  'clear the the KeyPress
    End If
End Sub

Otros consejos

La forma en que lo hice antes (y la última vez que trabajé en Access fue alrededor del 97, por lo que mi memoria no es tan buena) fue generar un evento de clave y ejecutar una función de VBA.Es un método similar a lo que se hace con un cuadro de texto de sugerencia AJAX en una aplicación de formulario web moderna, pero, según recuerdo, podría fallar si su formulario de Access tiene otros eventos que tienden a ocurrir con frecuencia, como onMouseMove sobre todo el objeto del formulario.

Usar el evento KeyPress significa que su código se activará cada vez que el usuario escriba.Esto puede provocar parpadeos en la pantalla y otros problemas (el evento OnChange sería el mismo).

Me parece que deberías usar un solo evento para eliminar los CrLf, y el evento correcto sería AfterUpdate.Simplemente harías esto:

  If InStr(Me!MyMemoControl, vbCrLf) Then
     Me!MyMemoControl = Replace(Me!MyMemoControl, vbCrLf, vbNullString)
  End If

Tenga en cuenta el uso de las constantes globales de Access, vbCrLf (para Chr(10) y Chr(13)) y vbNullString (para cadenas de longitud cero).

Usar una regla de validación significa que le mostrará un feo mensaje de error a su usuario, pero le proporcionará pocas herramientas para corregir el problema.Me parece que el enfoque AfterUpdate es mucho más limpio y fácil para los usuarios.

No estoy completamente seguro de eso, pero deberías poder eliminar los saltos de línea cuando renderices el contenido, o incluso ejecutar un vbscript para borrarlo, solo necesitas verificar si hay chr(13) o vbCrLf.

Si no desea que un evento interfiera, puede configurar la propiedad Regla de validación para que el cuadro de texto sea

NOT LIKE "*"+Chr(10)+"*" OR "*"+Chr(13)+"*"

Probablemente también desee configurar el Texto de validación para explicar específicamente por qué Access muestra un cuadro de error.

Gracias Ian y BIBD.Creé un sub público basado en tu respuesta que es reutilizable.

Public Sub PreventNewlines(ByRef KeyAscii As Integer)
    If KeyAscii = 10 Or KeyAscii = 13 Then KeyAscii = 0
End Sub

Private Sub textbox_KeyPress(KeyAscii As Integer)
    Call PreventNewlines(KeyAscii)
End Sub

El parpadeo de la pantalla nunca debería ser un problema, ya que estos son eventos controlados, no sondeos constantes (y el control limita aún más el alcance).Me parece un argumento no válido, ya que cada editor de texto ejecuta algún código con cada pulsación de tecla.

Gracias

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