panel加载用户控件问题,在线等求救 panel add进去一个自定义用户控件,控件完全覆盖panel窗体,怎么才能让,panel出发鼠标经过事件,和其他事件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一个本方法,在每个控件的对应事件中,去强制执行panel的相关事件第二个,用消息拦截,比如 重载 wndproc 比如最简单的鼠标经过panel事件吧,内部控件完全填充panel 鼠标经过根本触发不了panel的事件,还有就是,panel和用户控件不在一个工程里面,经过的panel事件要处理的是跟他同一个工程里面的左侧窗体消失 都已经完全覆盖了,那就用触发控件的鼠标经过事件来再去触发panel的事件呗 自定义控件完全覆盖了pannel控件 试问当鼠标移上去能触发pannel里面的鼠标经过事件吗? 首先程序的结构是 工程1引用工程2 ,工程1是左右框架结构的程序 左panel加载菜单,右panel加载内容,怎么让鼠标移动到 右panel上,左侧panel消失,因为 工程1已经引用工程2了,工程2里面所有的页面都做成自定义 用户控件了,在控件面写事件明显不现实啊,工程1已经引用了2,2无法在操作工程1了啊 看下这个例子,实现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; } }} 一个比较妥协的办法思路:在你的自定义控件中: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; } 没有测试,纯手工敲得代码,给分吧; 你自定义控件触发不就行了,干嘛要panel触发呢 C#.net如何实现工业平板电脑面板功能键控制程序的运行与事件 谁帮我提供一份c#web设计, 连接数据库的模板,谢谢! 如何给ActiveX控件传递泛型值? 水晶报表是C#专有的吗?学的话应该从何入手? 结构体问题 树形结构获取节点问题 数据库的数据如何添加到TreeView? 如何取这个记录集 连续显示jpg图像的问题 成功把C代码转换成C#代码的送出120分!! WPF,XAML应用程序与Silverlight SOCKET网络编程时异步数据响应
第二个,用消息拦截,比如 重载 wndproc
{
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;
}
}
}
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;
} 没有测试,纯手工敲得代码,给分吧;