panel add进去一个自定义用户控件,控件完全覆盖panel窗体,怎么才能让,panel出发鼠标经过事件,和其他事件

解决方案 »

  1.   

    第一个本方法,在每个控件的对应事件中,去强制执行panel的相关事件
    第二个,用消息拦截,比如 重载 wndproc
      

  2.   

    比如最简单的鼠标经过panel事件吧,内部控件完全填充panel 鼠标经过根本触发不了panel的事件,还有就是,panel和用户控件不在一个工程里面,经过的panel事件要处理的是跟他同一个工程里面的左侧窗体消失
      

  3.   

    都已经完全覆盖了,那就用触发控件的鼠标经过事件来再去触发panel的事件呗
      

  4.   

    自定义控件完全覆盖了pannel控件 试问当鼠标移上去能触发pannel里面的鼠标经过事件吗?
      

  5.   

    首先程序的结构是 工程1引用工程2  ,工程1是左右框架结构的程序 左panel加载菜单,右panel加载内容,怎么让鼠标移动到 右panel上,左侧panel消失,因为 工程1已经引用工程2了,工程2里面所有的页面都做成自定义 用户控件了,在控件面写事件明显不现实啊,工程1已经引用了2,2无法在操作工程1了啊
      

  6.   

    看下这个例子,实现IMessageFilter接口,然后注册Form的MouseMove事件,就能收到被UserControl挡住的鼠标移动消息: public partial class Form1 : Form, IMessageFilter
    {
    private const int WM_MOUSEMOVE = 0x0200;
    private const int WM_LBUTTONDOWN = 0x201;
    private const int WM_LBUTTONUP = 0x202;
    private const int WM_LBUTTONDBLCLK = 0x203;
    private Dictionary<int, Action<MouseEventArgs>> _actions; public Form1()
    {
    InitializeComponent(); _actions = new Dictionary<int, Action<MouseEventArgs>>
    {
    {WM_MOUSEMOVE, OnMouseMove},
    {WM_LBUTTONDOWN, OnMouseDown},
    {WM_LBUTTONUP, OnMouseUp},
    {WM_LBUTTONDBLCLK, OnMouseDoubleClick},
    };
    Application.AddMessageFilter(this);
    this.Closed += (s, e) => Application.RemoveMessageFilter(this);
    } public bool PreFilterMessage(ref Message m)
    {
    if (_actions.ContainsKey(m.Msg))
    {
    var pt = PointToClient(MousePosition);
    var args = new MouseEventArgs(MouseButtons.Left, 0, pt.X, pt.Y, 0);
    _actions[m.Msg](args);
    }
    return false;
    }
    }
    }
      

  7.   

    一个比较妥协的办法思路:在你的自定义控件中:
    1、增加一个自定义事件:public event EventHandler HideLeftPanel;
    2、在自定义控件中圆圈圈中的几个控件的MouseClick事件中引发自定义事件HideLeftPanel;
       private void txtContent_MouseClick(object sender,MouseEventArgs e)
       {
            if(HideLeftPanel!= null)
            {
                HideLeftPanel(this,null);
            }
       }
    3、然后你处理在窗体中处理自定义控件的hideleftpanel事件就行了
       private void myCustomCtrl_HideLeftPanel(object sender,EventArgs e)
       {
           pnlLeft.Visible = false;
       }   没有测试,纯手工敲得代码,给分吧;
      

  8.   

    你自定义控件触发不就行了,干嘛要panel触发呢