首页 新闻 搜索 专区 学院

winform点击窗体上面任何地方都触发的事件是什么

0
[已解决问题] 解决于 2013-10-22 23:00

mousedown click之类的事件 如果点击在控件上面就不会触发的

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:51
提问于:2013-06-04 12:03
< >
分享
最佳答案
1

方法一: 用windows api 钩子程序 获取鼠标事件

方法二: 在form窗体的构造函数中注册所有子控件的鼠标事件到自身的click事件中

foreach (var item in this.Controls)
{
((Control)item).MouseClick += new MouseEventHandler(Form1_MouseClick);
}

方法三: 重写WndProc

 /// <summary>
        /// windows消息窗体 屏蔽鼠标操作
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
 
            if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203 || m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206 || m.Msg == 0x207 || m.Msg == 0x208 || m.Msg == 0x209)
            {
                return;
            }
            base.WndProc(ref m);
 
        }
奖励园豆:5
WuRang | 小虾三级 |园豆:1730 | 2013-06-04 12:29

其实我想实现的功能是点击一个按钮弹出一个panel  然后点击任何地方移除这个panel

拖鞋王子 | 园豆:51 (初学一级) | 2013-06-04 13:48

@拖鞋王子: 点击任何地方具体指程序窗体内还是任一地方,包括桌面

WuRang | 园豆:1730 (小虾三级) | 2013-06-04 13:51

@WuRang: 程序窗体内的

拖鞋王子 | 园豆:51 (初学一级) | 2013-06-04 13:52

@拖鞋王子: 为什么不用ContextMenuStrip而用panel?

WuRang | 园豆:1730 (小虾三级) | 2013-06-04 14:09

@WuRang: 不过按你的要求用pancel也可以,给panel加事件

panel.Capture = true;

panel.MouseCaptureChanged += panel_MouseCaptureChanged;

然后在事件里做处理

void panel_MouseCaptureChanged(object sender, EventArgs e)
{
if (panel.Capture == false)
{
this.Controls.Remove(panel);
}
}

 

public partial class Form1 : Form
    {
        Panel panel = new Panel();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panel.Width = 50;
            panel.Height = 50;
            panel.BackColor = Color.Red;
            panel.Location = new Point(20, 20);
       
            this.Controls.Add(panel);
            panel.Capture = true;
            panel.MouseCaptureChanged += panel_MouseCaptureChanged;
          
        }

        void panel_MouseCaptureChanged(object sender, EventArgs e)
        {
            if (panel.Capture == false)
            {
                this.Controls.Remove(panel);
            }
        }


    }

 

WuRang | 园豆:1730 (小虾三级) | 2013-06-04 14:14

@WuRang: 正解,我试了,这个方案可行

会长 | 园豆:10034 (专家六级) | 2013-06-04 15:44
其他回答(3)
0

mouseup

苏飞 | 园豆:2024 (老鸟四级) | 2013-06-04 12:35

不行

支持(0) 反对(0) 拖鞋王子 | 园豆:51 (初学一级) | 2013-06-04 12:45
0

mouse move, mouseclick

程序诗人 | 园豆:313 (菜鸟二级) | 2013-06-04 15:05
0

可以屏蔽鼠标事件,谢谢了

hope xiaoyu | 园豆:202 (菜鸟二级) | 2015-10-15 09:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册