当鼠标在子控件上时,不会调用MouseDown事件。我尝试过KeyPreview = true;,但它没有帮助(尽管它适用于KeyDown -键盘单击)。
我正在寻找类似于KeyPreview的东西,但是要寻找鼠标事件。
如果有更简单的消息,我宁愿不使用IMessageFilter来处理WinAPI消息。alternative (同时,Application-wide.设置了IMessageFilter我只想要表单-wide。)迭代所有子控件,订阅每个控件,都有其自身的缺点。
发布于 2014-01-23 16:53:16
您仍然可以使用MessageFilter,只需对ActiveForm进行筛选:
private class MouseDownFilter : IMessageFilter {
public event EventHandler FormClicked;
private int WM_LBUTTONDOWN = 0x201;
private Form form = null;
[DllImport("user32.dll")]
public static extern bool IsChild(IntPtr hWndParent, IntPtr hWnd);
public MouseDownFilter(Form f) {
form = f;
}
public bool PreFilterMessage(ref Message m) {
if (m.Msg == WM_LBUTTONDOWN) {
if (Form.ActiveForm != null && Form.ActiveForm.Equals(form)) {
OnFormClicked();
}
}
return false;
}
protected void OnFormClicked() {
if (FormClicked != null) {
FormClicked(form, EventArgs.Empty);
}
}
}然后以你的形式附上:
public Form1() {
InitializeComponent();
MouseDownFilter mouseFilter = new MouseDownFilter(this);
mouseFilter.FormClicked += mouseFilter_FormClicked;
Application.AddMessageFilter(mouseFilter);
}
void mouseFilter_FormClicked(object sender, EventArgs e) {
// do something...
}https://stackoverflow.com/questions/21312587
复制相似问题