Color de fondo de la frontera de un panel de Windows Forms
Pregunta
¿Hay alguna forma de cambiar el BackColor
de la frontera de un panel de control o similar?
Estoy tratando de "destacado" el control de usuario cuando pasa el ratón sobre el control de usuario.
Solución
Esta es una clase simple que pone de relieve los controles en el formulario con una frontera:
public class Highlighter : Control
{
public void SetTarget(Control c)
{
Rectangle r = c.Bounds;
r.Inflate(3, 3);
Bounds = r;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.FillRectangle(Brushes.Red, e.ClipRectangle);
}
}
A continuación, en su forma, ajuste todo para utilizarlo:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control c in Controls)
{
c.MouseEnter += mouseEnter;
c.MouseLeave += mouseLeave;
}
}
private void mouseEnter(object sender, EventArgs e)
{
_highlighter.SetTarget(sender as Control);
_highlighter.Visible = true;
}
private void mouseLeave(object sender, EventArgs e)
{
_highlighter.Visible = false;
}
A continuación, en el constructor, basta con crear el marcador:
public Form1()
{
InitializeComponent();
_highlighter = new Highlighter();
Controls.Add(_highlighter);
}
Otros consejos
Puede utilizar los eventos MouseEnter / MouseLeave para hacer esto.
private void panel1_MouseEnter(object sender, EventArgs e)
{
panel1.BackColor = System.Drawing.Color.Red;
}
private void panel1_MouseLeave(object sender, EventArgs e)
{
panel1.BackColor = System.Drawing.Color.Empty;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow