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.

¿Fue útil?

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
scroll top