ToolStripLabel resaltado

26/01/2007 - 10:51 por Plextor | Informe spam
Hola a todos,

Necesito realizar un control como el ToolStripLabel, pero con una
propiedad de resaltado (como el toolStripButton cuando se pasa el ratón
por encima del control).

He realizado una herencia de ToolStripLabel, pero no consigo implementar
dicha propiedad de resaltado.

¿Alguien tiene alguna idea/sugerencia acerca de ésto?

Un saludo
Plextor
 

Leer las respuestas

#1 Luis Miguel Blanco
27/01/2007 - 18:27 | Informe spam
Hola Plextor

Quizá ya lo hayas probado, pero en el caso de que no sea así, una solución
rápida y que te evita la tarea de heredar de las clases que componen los
elementos de un ToolStrip, pasaría por utilizar en tu ToolStrip precisamente
un control ToolStripButton, al que le asignarías el literal a mostrar en su
propiedad Text. A continuación le asignas a su propiedad DisplayStyle el
valor ToolStripItemDisplayStyle.Text, lo que provocará el efecto de que se
comporte en cierta medida como una etiqueta, pero con la característica de
resaltado de color cuando sitúes el ratón encima. A continuación tienes un
bloque de código de ejemplo:

//-
// asignar un texto al botón
// y configurarlo para que su estilo de
// visualización sea sólo dicho texto
this.btnEtiqueta.Text = "Botón con forma de etiqueta";
this.btnEtiqueta.DisplayStyle = ToolStripItemDisplayStyle.Text;
//-

Si el color por defecto que se muestra cuando el ToolStripButton se resalta
no te parece adecuado, puedes personalizar una gran parte de los aspectos de
presentación de este control utilizando una clase derivada de
ToolStripRenderer.

En esta clase deberás reemplazar aquellos métodos relacionados que las
funcionalidades visuales a personalizar, por ejemplo: el color de fondo del
ToolStrip o del botón. Un ejemplo de esta clase con dichas funcionalidades lo
tienes en el siguiente bloque de código:

//-
// en este ejemplo debemos declarar el namespace Drawing2D
// porque utilizamos un degradado para pintar los colores
using System.Drawing.Drawing2D;
//

public class GeneradorContenidos : ToolStripRenderer
{
protected override void
OnRenderToolStripBackground(ToolStripRenderEventArgs e)
{
// pasar el contexto de dispositivo gráfico a una variable
Graphics oGraphics = e.Graphics;

// crear un efecto de degradado entre dos colores
LinearGradientBrush oDegradado;
oDegradado = new LinearGradientBrush(e.AffectedBounds,
Color.Green, Color.Yellow,
LinearGradientMode.ForwardDiagonal);

// aplicar el degradado sobre las dimensiones
// que ocupa el control ToolStrip
oGraphics.FillRectangle(oDegradado, e.AffectedBounds);
oDegradado.Dispose();

// llamar a la implementación base de este método
base.OnRenderToolStripBackground(e);
}

protected override void
OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
// pasar el contexto de dispositivo gráfico a una variable
Graphics oGraphics = e.Graphics;

// si pasamos el ratón sobre el botón
if (e.Item.Selected)
{
// aplicar un color de fondo distinto a
// la superficie ocupada por el botón,
// y dibujar un rectángulo que indica los
// límites del botón
oGraphics.FillRectangle(Brushes.Aqua,
new Rectangle(0, 0, e.Item.Width, e.Item.Height));

oGraphics.DrawRectangle(Pens.Black,
new Rectangle(0, 0, e.Item.Width - 1, e.Item.Height - 1));
}
}
}
//-

Una vez creada esta clase, deberás asignar una instancia de la misma a la
propiedad Renderer del control ToolStrip, por ejemplo en el evento Load del
formulario:

//-
private void Form1_Load(object sender, EventArgs e)
{
// asignar un texto al botón
// y configurarlo para que su estilo de
// visualización sea sólo dicho texto
this.btnEtiqueta.Text = "Botón con forma de etiqueta";
this.btnEtiqueta.DisplayStyle = ToolStripItemDisplayStyle.Text;

// crear una instancia de la clase que genera
// contenidos personalizados para el ToolStrip
// y asignarla a dicho control
this.tsBarra.Renderer = new GeneradorContenidos();
}
//-

De esta forma, al situar el cursor del ratón sobre el botón del ToolStrip,
personalizamos su efecto de resaltado con un color de fondo diferente del
estándar, y un recuadro que rodea al botón, que en este caso es igual que el
habitual pero podríamos haberlo dibujado con mayor grosor y otro color.

Bien, pues esto es todo, espero que te pueda servir para resolver el problema.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Plextor" wrote:

Hola a todos,

Necesito realizar un control como el ToolStripLabel, pero con una
propiedad de resaltado (como el toolStripButton cuando se pasa el ratón
por encima del control).

He realizado una herencia de ToolStripLabel, pero no consigo implementar
dicha propiedad de resaltado.

¿Alguien tiene alguna idea/sugerencia acerca de ésto?

Un saludo
Plextor

Preguntas similares