none
Poner en un texbox los datosrecibidos sobre una misma linea RRS feed

  • Pregunta

  • Hola,

    Tengo este codigo que me permite leer datos por medio de bluetooth de un equipo GPS.

    Lo que hace es que en el textBox_visualizar_mensaje.Text me mete cada linea de datos que llega.

    Lo que busco es que coloque lo que recibo en la primera línea una y otro vez, machacando así la anterior que existia.

     //Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'
                serialPort1.DataReceived += new
           System.IO.Ports.SerialDataReceivedEventHandler(Recepcion);
            }
            //Al recibir los datos
            private void Recepcion(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                //Acumular los carácteres recibidos a nuestro 'buffer' (string)
                Recibidos += serialPort1.ReadExisting();
                //invocar o llamar al proceso de tramas
                this.Invoke(new EventHandler(Actualizar));
            }
            //Procesar los datos recibidos en el buffer y extraer tramas completas
            private void Actualizar(object s, EventArgs e)
            {
                //Asignar el valor de la trama al textBox
                textBox_visualizar_mensaje.Text = Recibidos;

    miércoles, 23 de mayo de 2012 13:23

Todas las respuestas

  • Hola cutuche.

    ¿Pero cuál es el problema que surge?

    Tal y como lo tienes, reemplazas el valor que existía en el textbox por lo que tienes en Recibidos, con lo que se verá todo en una sóla línea, salvo que al textbox le hayas habilitado la propiedad Multiline y que el texto sea mayor que el ancho del TextBox


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"

    • Propuesto como respuesta cutuche1 miércoles, 23 de mayo de 2012 14:48
    • Votado como útil cutuche jueves, 24 de mayo de 2012 9:31
    miércoles, 23 de mayo de 2012 13:59
  • Hola Santiago,

    Muchas gracias ahora mismo no estoy en el ordenador del programa en C#, pero creo que lo tengo en multiline.

    Gracias

    miércoles, 23 de mayo de 2012 14:49
  • Hola de nuevo,

    He deshabilitado la propiedad Multiline y efectivamente lo introduce en una línea. Esto Ok

    Pero quiero que cada vez que llega información (que es cada segundo), "machaque", se coloque encima de la que había.

    Es decir no añada lo nuevo al final de la línea y machaque se coloque encima de lo que había.

    Gracias

    jueves, 24 de mayo de 2012 9:34
  • Pues entonces creo que deberías cambiar esto

    Recibidos += serialPort1.ReadExisting();

    por esto

    Recibidos = serialPort1.ReadExisting();

    Al fin y al cabo lo que muestras en el TextBox es lo que hay en esa variable, por lo que debes machacar ahí el contenido recibido.


    Atentamente, Sergio.

    Blog
    Twitter

    jueves, 24 de mayo de 2012 9:38
  • Me quede pensando en que machacar el contenido de Recibidos puede que te de problemas en otra parte del código porque te interese conservar todo el contenido recibido. En ese caso puede usar otra variable para ver lo ultimo recibido y así conservas todo lo recibido (no se si me he explicado bien)

    En ese caso podrías hacer algo así

    //Al recibir los datos
            private void Recepcion(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
            { 
                //Acumular los carácteres recibidos a nuestro 'buffer' (string)
                UltimoRecibido = serialPort1.ReadExisting();
                Recibidos += UltimoRecibido;
                //invocar o llamar al proceso de tramas
                this.Invoke(new EventHandler(Actualizar));
            }
            //Procesar los datos recibidos en el buffer y extraer tramas completas
            private void Actualizar(object s, EventArgs e)
            {
                //Asignar el valor de la trama al textBox
                textBox_visualizar_mensaje.Text = UltimoRecibido;
    En este caso debería declarar la variable UltimoRecibido en el mismo sitio donde lo hagas con la variable Recibidos.


    Atentamente, Sergio.

    Blog
    Twitter

    jueves, 24 de mayo de 2012 9:48
  • Tal y como te indica Sergio, quizás tendrías que cambiar un poco la idea.

    De todas formas, para hacer lo que dices, sí que tendrías que concatenar los datos recibidos pero yo lo haría de esta forma

     Recibidos = serialPort1.ReadExisting() + "\n" + Recibidos;

    Esto sería con un TextBox MultiLine y te iría mostrando siempre lo último recibido en la primera línea.


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"

    jueves, 24 de mayo de 2012 10:01
  • He seguido pensando en ello, y me da igual que vaya a un textBox que a un array (luego yo ya lo mostraría despues), en el array podría colocarlo según llega siempre en la posición [0], y así lo machacaría.

    string valor[1];

    string valor[0] = Recibidos; (aqui faltaría algo de codigo no?
               

    ¿Como lo veís?

    ¿Sería lógico?

    jueves, 24 de mayo de 2012 10:28