SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: jose.va19 en Domingo 22 de Junio de 2008, 17:53

Título: problema con los eventos KeyPress (solucionado)
Publicado por: jose.va19 en Domingo 22 de Junio de 2008, 17:53
Hola, resulta que estoy haciendo una especie de shell y la propia consola seria un richTextBox. El problema es que si el usuario introduce un comando, y luego con la tecla de retroceso empieza a borrarlo, tengo que comprobar que borre hasta el comienzo del prompt:

<jose>$ dir

es decir, cuando pulse la tecla de retroceso 3 veces ya no puede borrar más. Entonces tengo una función que compruebo si se pulsa esa tecla y si se puede borrar o no. El problema está en que cuando pulso la tecla (y en teoria no podría borrar) me sale la alerta de no poder borrar, pero en el richTextBox si que se borra.

Entonces lo que queria hacer es que en esta función se comprobara si se puede borrar o no y en caso de que no, desactivara de alguna manera el evento para que no se borrara del richTextBox.

He estado mirando y esta la propiedad de Handled que te dice si el evento ha sido tratado o no y pongo Handled = true, pero sigue borrandose el texto en el richTextBox.
Título: Re: problema con los eventos KeyPress
Publicado por: Mollense en Domingo 22 de Junio de 2008, 23:17
Cita de: "jose.va19"
Hola, resulta que estoy haciendo una especie de shell y la propia consola seria un richTextBox. El problema es que si el usuario introduce un comando, y luego con la tecla de retroceso empieza a borrarlo, tengo que comprobar que borre hasta el comienzo del prompt:

<jose>$ dir

es decir, cuando pulse la tecla de retroceso 3 veces ya no puede borrar más. Entonces tengo una función que compruebo si se pulsa esa tecla y si se puede borrar o no. El problema está en que cuando pulso la tecla (y en teoria no podría borrar) me sale la alerta de no poder borrar, pero en el richTextBox si que se borra.

Entonces lo que queria hacer es que en esta función se comprobara si se puede borrar o no y en caso de que no, desactivara de alguna manera el evento para que no se borrara del richTextBox.

He estado mirando y esta la propiedad de Handled que te dice si el evento ha sido tratado o no y pongo Handled = true, pero sigue borrandose el texto en el richTextBox.
Me parece que vas a tener que usar otro evento, por ejemplo, el "KeyDown":

Código: Text
  1. private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
  2. {
  3.         if (richTextBox1.Text[richTextBox1.Text.Length - 1] == '$' && e.KeyCode== Keys.Back)
  4.                  e.Handled = true;
  5. }
  6.  

El tema es que la ejecución del evento "KeyPress" ocurre cuando la tecla ya se "procesó" (Bueno, no se como decirlo :P )

Un saludo
Título: Re: problema con los eventos KeyPress
Publicado por: jose.va19 en Domingo 22 de Junio de 2008, 23:51
Efectivamente, cuando se presiona una tecla se producen tres eventos: KeyDown, keyPress y KeyUp por ese orden.
Tenia que tratar primero el evento keyDown.

Solucionado, gracias tio.  :good:
Título: Re: problema con los eventos KeyPress
Publicado por: Mollense en Lunes 23 de Junio de 2008, 00:25
Cita de: "jose.va19"
Efectivamente, cuando se presiona una tecla se producen tres eventos: KeyDown, keyPress y KeyUp por ese orden.
Tenia que tratar primero el evento keyDown.

Solucionado, gracias tio.  :good:
Un placer :beer: