OnPaint del TextBox

29/01/2004 - 02:53 por Mauricio Atanache G. | Informe spam
Mi problema es el siguiente :

He creado un control heredado de TextBox, mi idea era cambiarle el color del
borde, esto lo hago
sobrecargando el evento OnPaint y dibujando el rectangulo y luego llamando
base.OnPaint(e).

El problema es que el control no muestra el texto que tiene sino hasta
cuando hago doble click sobre el control, de otra forma no muestra el texto
que tiene el control.

He intentado colocando el llamado a OnPaint antes y despues de digujar el
control pero hasta ahora nada ha funcionado.

En internet he encontrado otras personas con el mismo problema pero hasta
ahora ninguna solucion ha funcionado.

Otra posibilidad podria ser dibujar el texto con

e.Graphics.DrawString, pero este metodo necesita un Brush que no se de donde
obtener.

Cordial saludo,


Mauricio Atanache.

Preguntas similare

Leer las respuestas

#1 David caso
29/01/2004 - 13:47 | Informe spam
buenas:

efectivamente, premio, te has ganado un perrito piloto.
No ahora en serio, y sin coña, en el paint, no te vale.
la solucion es hacer el control con WndProc.
Pequeño ejemplo:

private const int WM_PAINT = 0xF;

protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if (m.Msg == WM_PAINT)
{
Graphics g = this.CreateGraphics();
.
d.dispose();

}
}

un saludin
Respuesta Responder a este mensaje
#2 David caso
29/01/2004 - 18:10 | Informe spam
buenas:

pequeña correccion, y lo del brush, ;P

private const int WM_PAINT = 0xF;

protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if (m.Msg == WM_PAINT)
{
Graphics g = this.CreateGraphics();
SolidBrush brushT = new SolidBrush(Color.Red);
g.DrawString("El texto que se escribe",this.Font,brushT,10,10);
brushT.Dispose();
g.dispose();

}
}



un saludin
Respuesta Responder a este mensaje
#3 Mauricio Atanache G
30/01/2004 - 05:20 | Informe spam
Excelente Mago.

Para resumir y dejar claro todo el asunto queda asi :

Todo lo que dice en los articulos que utilizan el OnPaint es innecesario,
dicen esto :

Sobrecargue el Evento OnPaint para dibujar el borde...
Y llame la funcion :
this.SetStyle(ControlStyles.UserPaint,true);

en el constructor de la clase.

y listo!, pues mentira, pero lo que pueden hacer que funciona perfecto es lo
siguiente siguiendo el ejemplo de mi amigo David.

Adicionen el siguiente método a la clase :

protected override void WndProc(ref Message m)

{

base.WndProc (ref m);

if (m.Msg == WM_PAINT)

{

Color borderColor = Color.Red;

ButtonBorderStyle borderStyle = ButtonBorderStyle.Solid;

ControlPaint.DrawBorder(this.CreateGraphics(),this.ClientRectangle,
borderColor, borderStyle );

}

}


Por supuesto si quieren modificar el color del borde, pues utilicen una
propiedad!!.

Un cordial saludo.

Mauricio Atanache G.

"David caso" <listas.algarrobo.quitame.casovazquez.net> escribió en el
mensaje news:
buenas:

pequeña correccion, y lo del brush, ;P

private const int WM_PAINT = 0xF;

protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if (m.Msg == WM_PAINT)
{
Graphics g = this.CreateGraphics();
SolidBrush brushT = new SolidBrush(Color.Red);
g.DrawString("El texto que se escribe",this.Font,brushT,10,10);
brushT.Dispose();
g.dispose();

}
}



un saludin
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida