winform 给Panle(控件)添加事件其子控件也相应父控件的事件

private void plSetting_MouseLeave(object sender, EventArgs e)
        {
            EventStyle(sender);
        }
private void plSetting_MouseMove(object sender, MouseEventArgs e)
        {
            EventStyle(sender, true);
        }

先写好事件

private void EventStyle(object sender, bool ev = false)
        {
            Control cl = sender as Control;
            Panel pl = cl is Panel ? cl as Panel : cl.Parent as Panel;
            if (ev)
            {
                pl.BackColor = Color.FromArgb(193, 210, 238);
                pl.Cursor = Cursors.Hand;
            }
            else
            {
                pl.BackColor = Color.White;
            }
        }

给控件添加样式

public void RemoveControlEvent(Control control, string eventName)
        {
            FieldInfo _fl = typeof(Control).GetField(eventName, BindingFlags.Static | BindingFlags.NonPublic);
            if (_fl != null)
            {
                object _obj = _fl.GetValue(control);
                PropertyInfo _pi = control.GetType().GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
                EventHandlerList _eventlist = (EventHandlerList)_pi.GetValue(control, null);
                if (_obj != null && _eventlist != null)
                    _eventlist.RemoveHandler(_obj, _eventlist[_obj]);
            }
        }
private void RemoveControlEvent(Control cl)
        {
            cl.MouseMove -= plSetting_MouseMove;
            cl.MouseLeave -= plSetting_MouseLeave;
        }

添加事件之前先清除事件

public void EventMethod(Panel plMenu)
        {
            foreach (Control cl in plMenu.Controls)
            {
                RemoveControlEvent(cl);
                cl.MouseMove += plSetting_MouseMove;
                cl.MouseLeave += plSetting_MouseLeave;
                if (cl is Panel)
                {
                    foreach (Control cls in cl.Controls)
                    {
                        RemoveControlEvent(cls);
                        cls.MouseMove += plSetting_MouseMove;
                        cls.MouseLeave += plSetting_MouseLeave;
                    }
                }
            }
        }

调用此方法即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值