Access

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

Todos los ejemplos de código, ejemplos de descarga, enlaces, … en este sitio se proporcionan ‘COMO ES‘.

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba