none
Pasar lo que escribo de un TextBox a otro

    Pregunta

  • Buebas tardes a todos.

    Necesito pasar lo que escribo de un textbox a otro,no todo lo que hay escrito en un textbox,sino lo que escribo.

    Para hacer esto,utlizo el evento KeyPress,pero cuando le doy a la tecla de retroceso me pone un carter raro,en vez de quitarme palabras.

    Dejo codigo:

    Private Sub txt_comentario_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_comentario.KeyPress, txt_comentario_aux.KeyPress

            Try

                txt_comentario_aux.Text += e.KeyChar.ToString

            Catch ex As Exception

            End Try


        End Sub

    el caracter raro que me sale cuando le doy a la tecla retroceso es el siguiente:

    Haber si alguien pudiera ayudarme.MUCHAS GRACIAS

    lunes, 24 de octubre de 2016 14:56

Respuestas

  • "Juan Martinez F" preguntó:

    > Necesito pasar lo que escribo de un textbox a otro,no todo lo que
    > hay escrito en un textbox,sino lo que escribo.

    Hola, Juan:

    Como comentas que solamente deseas pasar al segundo control lo que escribes en el primero, me imagino que será porque en el segundo control ya tienes algo escrito y quieres respetar dicho valor, aunque se borre todo lo escrito en el primer control. Si es así, la solución no es tan sencilla como detectar únicamente que se ha pulsado la tecla de retroceso porque cuando se dé esta situación hay que saber lo que se tiene que escribir en el segundo control (txt_comentario_aux).

    Para no complicarse demasiado la vida con el contenido existente en el control TextBox de destino, mira a ver si te sirve lo siguiente. Para ello, inserta en ese formulario el siguiente código:

        Private CurrentText As String
        Private IsKeyBack As Boolean
    
        Private Sub txt_comentario_Enter(sender As Object, e As EventArgs) Handles txt_comentario.Enter
    
            ' El primer TextBox ha recibido el foco; establecer
            ' los valores por defecto de los campos.
            '
            CurrentText = txt_comentario_aux.Text
            IsKeyBack = False
    
        End Sub
    
        Private Sub txt_comentario_TextChanged(sender As Object, e As EventArgs) Handles txt_comentario.TextChanged
    
            If (IsKeyBack) Then
                txt_comentario_aux.Text = CurrentText & txt_comentario.Text
            End If
    
        End Sub
    
        Private Sub txt_comentario_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt_comentario.KeyPress
    
            If (e.KeyChar = ControlChars.Back) Then
                ' Se ha pulsado el carácter de retroceso.
                IsKeyBack = True
    
            Else
                ' Concatenar el carácter tecleado al valor actual del control TextBox.
                txt_comentario_aux.Text &= e.KeyChar
                IsKeyBack = False
    End If End Sub

    Te comento que el evento KeyPress se desencadena ANTES que el evento TextChanged, de ahí que establezcamos el valor True al campo IsKeyBack cuando se ha pulsado la tecla de retroceso: para escribir en el control TextBox de destino lo que había escrito en él (el valor del campo CurrentText) más lo que se ha escrito ahora en el primer control.


    > Private Sub txt_comentario_KeyPress(...) Handles txt_comentario.KeyPress, txt_comentario_aux.KeyPress

    Observo que el evento KeyPress lo utilizas para los dos controles TextBox. Te comento que si quieres implementar lo que te acabo de decir, mejor será que implementes el evento KeyPress del control txt_comentario_aux en otro procedimiento aparte, porque puede interferir en el valor del campo IsKeyBack.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 24 de octubre de 2016 16:50
    Moderador

Todas las respuestas

  • Si lo que quieres es que el texto que tengas en uno de los TextBox se muestre idéntico en el otro, en lugar de ir enviando los caracteres que se vayan pulsando en el TextBox maestro"pasa la propiedad text de este:

    Private Sub txt_comentario_TextChanged(sender As Object,
          e As EventArgs) Handles txt_comentario.TextChanged


       txt_comentario_aux.Text = txt_comentario.Text

    End Sub


    Saludos, Javier J

    lunes, 24 de octubre de 2016 15:49
  • Hola javier.

    No necesito pasar todo lo que hay en un textbox,sino solo lo que escribo

    lunes, 24 de octubre de 2016 15:51
  • Hola:

    Comprueba la tecla antes de hacer nada:

        Private Sub txt_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt.KeyPress
            If e.KeyChar = ControlChars.Back Then
                ' Se ha pulsado RETROCESO
                txtDst.Text = txtDst.Text.Substring(1, txtDst.TextLength - 1)
            Else
                txtDst.Text &= e.KeyChar
            End If
        End Sub

    Un saludo

    lunes, 24 de octubre de 2016 16:16
  • Juan Martinez F,

    Entiendo que intentas concatenar un valor existente en 'txt_comentario_aux' con el valor de la propiedad Text de 'txtComentario', ¿verdad? (por que de querer copiar el valor entre objetos bastará con la sugerencia de Javier Jimenez), de ser así pienso que no sólo tendrás problemas con la tecla de retroceso sino también cuando insertes un caracter en medio de la cadena o presiones otras teclas como [DELETE], [HOME], [END], etc. porque nota que acumulas -sobre el valor actual- el valor correspondiente para la tecla pulsada.

    Desde mi punto de vista deberías contener el valor del control 'txt_comentario_aux' (al momento de la asignación) y sobre dicho valor concatenar el valor de la propiedad Text del control 'txtComentario' algo como:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
    	txt_comentario_aux.Text = "Valor de ejemplo"
    	txt_comentario_aux.Tag = txt_comentario_aux.Text
    	txt_comentario_aux.ReadOnly = True
    	
    End Sub

    Private Sub txtComentario_TextChanged(sender As Object, ...
    
    	txt_comentario_aux.Text = String.Format("{0} {1}", 
    			txt_comentario_aux.Tag, CType(sender, TextBox).Text)
    
    End Sub



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    lunes, 24 de octubre de 2016 16:47
  • "Juan Martinez F" preguntó:

    > Necesito pasar lo que escribo de un textbox a otro,no todo lo que
    > hay escrito en un textbox,sino lo que escribo.

    Hola, Juan:

    Como comentas que solamente deseas pasar al segundo control lo que escribes en el primero, me imagino que será porque en el segundo control ya tienes algo escrito y quieres respetar dicho valor, aunque se borre todo lo escrito en el primer control. Si es así, la solución no es tan sencilla como detectar únicamente que se ha pulsado la tecla de retroceso porque cuando se dé esta situación hay que saber lo que se tiene que escribir en el segundo control (txt_comentario_aux).

    Para no complicarse demasiado la vida con el contenido existente en el control TextBox de destino, mira a ver si te sirve lo siguiente. Para ello, inserta en ese formulario el siguiente código:

        Private CurrentText As String
        Private IsKeyBack As Boolean
    
        Private Sub txt_comentario_Enter(sender As Object, e As EventArgs) Handles txt_comentario.Enter
    
            ' El primer TextBox ha recibido el foco; establecer
            ' los valores por defecto de los campos.
            '
            CurrentText = txt_comentario_aux.Text
            IsKeyBack = False
    
        End Sub
    
        Private Sub txt_comentario_TextChanged(sender As Object, e As EventArgs) Handles txt_comentario.TextChanged
    
            If (IsKeyBack) Then
                txt_comentario_aux.Text = CurrentText & txt_comentario.Text
            End If
    
        End Sub
    
        Private Sub txt_comentario_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txt_comentario.KeyPress
    
            If (e.KeyChar = ControlChars.Back) Then
                ' Se ha pulsado el carácter de retroceso.
                IsKeyBack = True
    
            Else
                ' Concatenar el carácter tecleado al valor actual del control TextBox.
                txt_comentario_aux.Text &= e.KeyChar
                IsKeyBack = False
    End If End Sub

    Te comento que el evento KeyPress se desencadena ANTES que el evento TextChanged, de ahí que establezcamos el valor True al campo IsKeyBack cuando se ha pulsado la tecla de retroceso: para escribir en el control TextBox de destino lo que había escrito en él (el valor del campo CurrentText) más lo que se ha escrito ahora en el primer control.


    > Private Sub txt_comentario_KeyPress(...) Handles txt_comentario.KeyPress, txt_comentario_aux.KeyPress

    Observo que el evento KeyPress lo utilizas para los dos controles TextBox. Te comento que si quieres implementar lo que te acabo de decir, mejor será que implementes el evento KeyPress del control txt_comentario_aux en otro procedimiento aparte, porque puede interferir en el valor del campo IsKeyBack.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 24 de octubre de 2016 16:50
    Moderador
  • Muchas gracias Enrique,me ha valido.
    martes, 25 de octubre de 2016 7:08