سؤال

هل هناك أي طريقة لتغيير BackColor من حدود لوحة أو سيطرة مماثلة؟

أحاول "تسليط الضوء على" التحكم في المستخدم عندما أحضر الماوس فوق عنصر تحكم المستخدم.

هل كانت مفيدة؟

المحلول

إليك فئة بسيطة تسلط الضوء على عناصر التحكم في النموذج مع حدود:

    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);
        }
    }

ثم، في النموذج الخاص بك، تعيين كل شيء لاستخدامه:

    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;
    }

ثم، في المنشئ، فقط قم بإنشاء Highlighter:

    public Form1()
    {
        InitializeComponent();
        _highlighter = new Highlighter();
        Controls.Add(_highlighter);
    }

نصائح أخرى

يمكنك استخدام أحداث Mouseenter / Mouseleave للقيام بذلك.

    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;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top