我想实现在一个窗体上无论单击哪里都执行个事件执行下面的语句,把一个菜单隐藏了this.panel5.Visible = false;
因为我这个窗体上的控件太多了,我不可能在每个控件的单击事件里全写这个,第一,我写不起,还怕漏了,第二,太不灵活了,一修改,全的重新写。有没有什么方法?只要他单击这个窗口里的任意控件,无论什么都执行这个方法?能冒泡到窗口的单击事件里吗?或者有什么好方法吗?
因为我这个窗体上的控件太多了,我不可能在每个控件的单击事件里全写这个,第一,我写不起,还怕漏了,第二,太不灵活了,一修改,全的重新写。有没有什么方法?只要他单击这个窗口里的任意控件,无论什么都执行这个方法?能冒泡到窗口的单击事件里吗?或者有什么好方法吗?
解决方案 »
- 如何将SqlDataReader转换为SqlDataAdapter?(在线等,急)
- TableAdapter如何给它的参数传值?
- 急!刚接手一个.net项目
- xml 处理问题~!
- 求SQL语句
- WinForm的DataGrid里面显示数据的小方格是不是TextBox?能否替换成Label?
- 请教程序中的代码是什么意思啊?谢谢!
- winform鼠标滑过panel背景变色
- 很多人迷茫,我也是,因为每个人都有一本难念的经。我快乐并痛着!散分!
- HttpWebRequest Headers Location
- 成员变量初始化顺序及数据结构大小问题,请解答
- 急!急!急!在线等。Web电子传真项目。异常来自 HRESULT:0x80070005 (E_ACCESSDENIED) 错误
如此极端的做法,为什么不直接在初始化的时候把这个控件给Visible = false???
{ }
先定个全局变量:
//标识鼠标与Panel位置的关系
bool isPanelRange;
先给你的panel5加上:
1. p.MouseHover事件:事件方法里写:isPanelRange=true;
2. p.MouseLeave事件:事件方法里写:isPanelRange=false; const int WM_MOUSECLICK=0x????;//这里我忘记了。
protected override void WndProc(ref Message m)
{
if(m.Msg==WM_MOUSECLICK)//如果是鼠标单击了
if(!isPanelRange)
this.panel5.Visable=false;
base.WndProc(ref m);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication24
{
public partial class Form1 : Form
{
Panel P = new Panel(); public Form1()
{
InitializeComponent(); P.BackColor = Color.Red;
P.Parent = this;
} protected override void WndProc(ref Message m)
{
int WM_LBUTTONDOWN = 0x201; if (m.Msg == WM_LBUTTONDOWN)
if (this.GetChildAtPoint(this.PointToClient(Control.MousePosition)) != P)
MessageBox.Show("Panel之外"); base.WndProc(ref m);
}
}
}
private bool isPanelRange; 二.先给你的panel5加上: 1. panel5.MouseHover事件:事件方法里写:isPanelRange=true;
2. panel5.MouseLeave事件:事件方法里写:isPanelRange=false; 三.重盖基类WndPro方法:
const int WM_MOUSELEFTBUTTONCLICK=515;
const int WM_MOUSERIGHTBUTTONCLICK=516;
protected override void WndProc(ref Message m)
{
//如果是鼠标单击了
if(m.Msg==WM_MOUSELEFTBUTTONCLICK||m.Msg==WM_MOUSERIGHTBUTTONCLICK)
//如果鼠标在panel5里单击鼠标
if(!isPanelRange)
//执行你想要的代码部份
this.panel5.Visable=false;
//继续Windows 的该消息其它响应
base.WndProc(ref m);
}