winform如何实现单击空白区域隐藏panel

[九零] 2014-08-21 03:23:39

看了好多帖子,但都没用特别满意的答案

...全文
545 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
[九零] 2014-09-04
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你可以用消息过滤器 IMessageFilter ,来判断对象句柄是否panel的句柄,如果不是,就隐藏
今天测试了下,MessageFilter可以实现,谢谢
[九零] 2014-09-03
  • 打赏
  • 举报
回复
引用 5 楼 rock29 的回复:
来个简单的:在空白处来个panel2,如果焦点落在panel2上,就。。。。或者鼠标单击双击在panel2上。。。。。
问题是我想实现控件之外的任何地方单击都能隐藏控件,像你这种说法如果panel2里面有其他控件,那么点击的时候同样不会激发panel2的单击双击事件~
rock29 2014-09-01
  • 打赏
  • 举报
回复
来个简单的:在空白处来个panel2,如果焦点落在panel2上,就。。。。或者鼠标单击双击在panel2上。。。。。
[九零] 2014-08-29
  • 打赏
  • 举报
回复
引用 2 楼 gjw_8888 的回复:

    Private Sub frm_linq_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
        Dim s As Region = New Region(Me.Panel1.RectangleToScreen(Me.Panel1.DisplayRectangle))
        If Me.Panel1.Visible = True AndAlso Not s.IsVisible(e.Location) Then
            Me.Panel1.Visible = False
        End If
    End Sub
MouseClick事件只是在单击窗口的时候才激发,我需要单击除了显示的panel外的任意地方都可以。 我现在用的鼠标钩子,但是获取鼠标的时候很慢
[九零] 2014-08-29
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
你可以用消息过滤器 IMessageFilter ,来判断对象句柄是否panel的句柄,如果不是,就隐藏
没用过IMessageFilter,网上也没找到太好的资料,你能给我写一个简单的例子吗?
gjw_8888 2014-08-27
  • 打赏
  • 举报
回复

    Private Sub frm_linq_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseClick
        Dim s As Region = New Region(Me.Panel1.RectangleToScreen(Me.Panel1.DisplayRectangle))
        If Me.Panel1.Visible = True AndAlso Not s.IsVisible(e.Location) Then
            Me.Panel1.Visible = False
        End If
    End Sub
bdmh 2014-08-21
  • 打赏
  • 举报
回复
你可以用消息过滤器 IMessageFilter ,来判断对象句柄是否panel的句柄,如果不是,就隐藏

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧