
Jugando con cuadros de texto de Microsoft Access
Hoy pensé simplemente en compartir algunos fragmentos de código para cosas que los desarrolladores a menudo necesitan hacer con cuadros de texto, y algunos que me divertí creando solo por el hecho de ver cómo se podía hacer.
Cosas como:
- Posicionamiento del cursor
- Seleccionar texto
- Insertar texto
- Recuperando contenido
- Y más…
Concepto fundamental
Quería aclarar un aspecto del trabajo con cuadros de texto antes de sumergirme en el código.
Siempre que deseamos saber dónde/qué ha seleccionado un usuario dentro de un cuadro de texto, la posición del cursor dentro del texto en un cuadro de texto, …, necesitamos capturar esa información antes de que se aleje de ese control.
Una vez que se mueven a otro control, esa información se pierde; volver a poner el foco no lo devolverá al estado anterior. Por eso, en algunos ejemplos que verá a continuación, utilizo el evento On Lost Focus para capturar esa información, guardarla en una variable temporal (podría ser fácilmente una variable global o algún otro medio de almacenamiento) y luego llamar o usar esa información en otros eventos (por ejemplo, hacer clic en el botón de comando).
Recuperar el contenido de un cuadro de texto
Private Sub cmd_GetAll_Click()
Me.txt_GetAll.SetFocus
Debug.Print Me.txt_GetAll.Text
End Sub
Recuperar el texto seleccionado de un cuadro de texto
Éste es un poco más complicado y tenemos que emplear el evento Lost Focus para identificar lo que está seleccionado.
Private Sub txt_InsertText_LostFocus()
TempVars!txt_InsertTextCurrentPosition = Me.txt_InsertText.SelStart 'Push to a TempVar, could be a Global Var if wanted
End Sub
Luego use cualquier otro evento para recuperar esta información para extraer la palabra.
Private Sub cmd_GetSelected_Click()
Debug.Print TempVars!SelectedText 'Retrieve the TempVar value
End Sub
Mueva el cursor al comienzo del cuadro de texto
Private Sub cmd_GotoStart_Click()
Me.txt_GotoStart.SetFocus
Me.txt_GotoStart.SelStart = 0
End Sub
Mueva el cursor hasta el final del cuadro de texto
Private Sub cmd_GotoEnd_Click()
Me.txt_GotoEnd.SetFocus
Me.txt_GotoEnd.SelStart = Len(Me.txt_GotoEnd.Text)
End Sub
Cómo seleccionar texto (palabras) en un cuadro de texto
Cómo seleccionar todo el texto (palabras) en un cuadro de texto
Private Sub cmd_SelectAll_Click()
If Len(Me.txt_SelectAll & vbNullString) = 0 Then Exit Sub
Me.txt_SelectAll.SetFocus 'In reality the next 2 lines are not even required typically.
Me.txt_SelectAll.SelStart = 0
Me.txt_SelectAll.SelLength = Len(Me.txt_SelectAll)
End Sub
Cómo seleccionar el primer texto (palabra) en un cuadro de texto
Private Sub cmd_SelectFirstWord_Click()
Dim lPosition As Long
If Len(Me.txt_SelectAll & vbNullString) = 0 Then Exit Sub
Me.txt_SelectAll.SetFocus
Me.txt_SelectAll.SelStart = 0
lPosition = InStr(Me.txt_SelectAll, " ")
If lPosition > 0 Then
Me.txt_SelectAll.SelLength = lPosition - 1
Else
Me.txt_SelectAll.SelLength = Len(Me.txt_SelectAll)
End If
End Sub
Cómo seleccionar el último texto (palabra) en un cuadro de texto
Private Sub cmd_SelectLastWord_Click()
Dim lPosition As Long
If Len(Me.txt_SelectAll & vbNullString) = 0 Then Exit Sub
Me.txt_SelectAll.SetFocus
lPosition = InStrRev(Me.txt_SelectAll, " ")
If lPosition > 0 Then
Me.txt_SelectAll.SelStart = lPosition
Else
Me.txt_SelectAll.SelStart = 0
End If
Me.txt_SelectAll.SelLength = Len(Me.txt_SelectAll) - lPosition
End Sub
Cómo seleccionar el siguiente texto (palabra) en un cuadro de texto
Una vez más, este escenario requiere el uso del evento Lost Focus para identificar la posición actual del cursor, ya que no se puede determinar una vez que se sale del control Cuadro de texto.
Private Sub txt_SelectAll_LostFocus()
TempVars!CurrentPosition = Me.txt_SelectAll.SelStart
End Sub
Private Sub cmd_SelectNextWord_Click()
Dim lCurPosition As Long
Dim lPositionStart As Long
Dim lPositionEnd As Long
Dim sText As String
lCurPosition = TempVars!CurrentPosition
Me.txt_SelectAll.SetFocus
sText = Right(Me.txt_SelectAll.Text, Len(Me.txt_SelectAll.Text) - lCurPosition)
lPositionStart = InStr(sText, " ")
Me.txt_SelectAll.SelStart = lCurPosition + lPositionStart
sText = Right(Me.txt_SelectAll.Text, Len(Me.txt_SelectAll.Text) - (lCurPosition + lPositionStart))
lPositionEnd = InStr(sText, " ")
If lPositionEnd = 0 Then
Me.txt_SelectAll.SelLength = Len(sText)
Else
Me.txt_SelectAll.SelLength = lPositionEnd - 1
End If
End Sub
Cómo seleccionar el texto anterior (palabra) en un cuadro de texto
Una vez más, este escenario requiere el uso del evento Lost Focus para identificar la posición actual del cursor, ya que no se puede determinar una vez que se sale del control Cuadro de texto.
Private Sub txt_SelectAll_LostFocus()
TempVars!CurrentPosition = Me.txt_SelectAll.SelStart
End Sub
Private Sub cmd_SelectPreviousWord_Click()
Dim lCurPosition As Long
Dim lPositionStart As Long
Dim lPositionEnd As Long
Dim sText As String
lCurPosition = TempVars!CurrentPosition
Me.txt_SelectAll.SetFocus
sText = Left(Me.txt_SelectAll.Text, lCurPosition)
lPositionStart = InStrRev(sText, " ") 'Beginning of the current word, we have to go back 1 more time
If lPositionStart > 0 Then
sText = Left(Me.txt_SelectAll.Text, lPositionStart - 1)
lPositionStart = InStrRev(sText, " ")
End If
Me.txt_SelectAll.SelStart = lPositionStart
sText = Right(Me.txt_SelectAll.Text, Len(Me.txt_SelectAll.Text) - lPositionStart)
lPositionEnd = InStr(sText, " ")
If lPositionEnd = 0 Then
Me.txt_SelectAll.SelLength = Len(sText)
Else
Me.txt_SelectAll.SelLength = lPositionEnd - 1
End If
End Sub
Insertar texto en un cuadro de texto
Insertar texto al principio del cuadro de texto
Private Sub cmd_InsertAtBeginning_Click()
Const sTextToInsert = "Some New Text"
Me.txt_InsertText.SetFocus
Me.txt_InsertText = sTextToInsert & Me.txt_InsertText.Text
End Sub
Insertar texto al final del cuadro de texto
Private Sub cmd_InsertAtEnd_Click()
Const sTextToInsert = "Some New Text"
Me.txt_InsertText.SetFocus
Me.txt_InsertText = Me.txt_InsertText.Text & sTextToInsert
End Sub
Insertar texto en la posición del cursor dentro del cuadro de texto
Una vez más, este escenario requiere el uso del evento Lost Focus para identificar la posición actual del cursor, ya que no se puede determinar una vez que se sale del control Cuadro de texto.
Private Sub txt_InsertText_LostFocus()
TempVars!txt_InsertTextCurrentPosition = Me.txt_InsertText.SelStart
End Sub
Private Sub cmd_InsertAtCursor_Click()
Dim lCurPosition As Long
Dim sString As String
Dim sPrefix As String
Dim sSuffix As String
Const sTextToInsert = "Some New Text"
lCurPosition = TempVars!txt_InsertTextCurrentPosition
Me.txt_InsertText.SetFocus
sString = Me.txt_InsertText.Text
sPrefix = Left(sString, lCurPosition)
sSuffix = Right(sString, Len(sString) - Len(sPrefix))
Me.txt_InsertText = sPrefix & sTextToInsert & sSuffix
End Sub
Base de datos de demostración
Siéntase libre de descargar una copia 100% desbloqueada de una base de datos de muestra (accdb) que he reunido utilizando el enlace que se proporciona a continuación:
Descargar “Jugando con cuadros de texto de Microsoft Access”
Text-Boxes.zip – Descargado 22 veces – 33,00 KB
Aviso sobre contenido/descargas/demostraciones
Descargo de responsabilidad/Notas:
Si no tiene Microsoft Access, simplemente descargue e instale la versión de ejecución disponible gratuitamente (esto permite ejecutar bases de datos de MS Access, pero no modificar su diseño):
Tiempo de ejecución de Microsoft Access 2010
Tiempo de ejecución de Microsoft Access 2013
Tiempo de ejecución de Microsoft Access 2016
Tiempo de ejecución de Microsoft 365 Access
En ningún caso Devhut.net o CARDA Consultants Inc. serán responsables ante el cliente/usuario final o cualquier tercero por cualquier daño, incluyendo cualquier pérdida de ganancias, pérdida de ahorros u otros daños incidentales, consecuentes o especiales que surjan del funcionamiento o la imposibilidad de operar el software que CARDA Consultants Inc. ha proporcionado, incluso si CARDA Consultants Inc. ha sido advertido de la posibilidad de tales daños.