永发信息网

winform点击某面板除自身外其他任何地方,该面板都隐藏

答案:2  悬赏:20  手机版
解决时间 2021-03-27 18:05
  • 提问者网友:树红树绿
  • 2021-03-27 13:39
winform点击某面板除自身外其他任何地方,该面板都隐藏
最佳答案
  • 五星知识达人网友:你可爱的野爹
  • 2021-03-27 14:48
鼠标点击除了菜单外的任何地方

您可以换一下您的思路
思路改变成: 将事件加入到"其他的任何地方"的那个控件上. 那个控件的Click事件,如果触发,并且该菜单为显示状态,则隐藏追问这样做得不偿失啊追答其中有一个FlowLayoutPanel面板控件,作用是用来当一个下拉弹出式列表。
当点击FlowLayoutPanel 的时候弹出一个下拉出式的菜单嘛?

当弹出后,监听窗体级别的click事件.如果点击的区域不在菜单内.则隐藏.
另外,您可以尝试moveout事件. 这个事件才是LostFocus的此种环境下的对应事件追问不是点击FlowLayoutPanel 出菜单,而是FlowLayoutPanel 本身作为一个菜单似的东西,moveout事件没找到呢。。。监听窗体级别的click事件这个有没有个例子呀追答首先哈..楼上说的是一个方法.但是使用钩子会造成杀毒软件报毒.

这个是弊端.
如果FlowLayoutPanel 是菜单的话..

这个就好办了.
监听FlowLayoutPanel 控件的状态改变即可.

因为当你点击其他控件时,该控件的stylechange会触发.
如果不触发.手动制作一个事件流程

show该控件时,将TAB设置在该控件上.当其点击其他位置时,应当会自动改变.
或者.强行将focus设置在该控件上,强行触发lostfocus

最靠谱的
另外还有.将该菜单以ShowDialog 形式展示,如果点击其他位置时,stylechange事件是必然会被触发(因为他会闪烁)此时隐藏即可.可以造成看起来不像是ShowDialog弹出追问给flowlayoupanel.focus()之后,注册lostfocus()事件隐藏没有效果。
最后一个,控件还可以ShowDialog么。。。
你有没有监听窗体的点击事件的代码呀,我只有用这个了追答把控件强制作为窗体弹出是可以的,相同你也可以吧窗体作为控件加入到子控件内哦!
全部回答
  • 1楼网友:神的生死簿
  • 2021-03-27 15:27
告诉你一个最笨的办法,foreach主窗口所有的control以及子control,给他们都+=一个OnFocused事件,事件内容当然是隐藏菜单了.追问这个我也想过的,但是这样做太浪费资源了追答想要高级点的方法就用鼠标钩子做咯
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯