Excel Add in 开发中使用WindowsForm遇到的bug

学无止境Coding 2013-11-21 03:29:29
本人在Excel Addin 中开发了一个Ribbon插件,上面有一个Button,点击后弹出一个下拉菜单,点击下拉菜单以外区域时关闭这个下拉菜单(鼠标移出这个区域不会自动关闭这个下拉菜单),这个下拉菜单是我自己用windows form 开发的一个User Control界面。

这些都很正常,异常是这样发生的:
点击这个button,弹出下拉菜单,鼠标移开点击其他非Excel的Applications(这个过程中下拉菜单不会自动收回),然后再打开这个Excel, 下拉菜单消失了,这个很正常,但是Excel上的所有按钮菜单都不起作用(除了Excel的最小化,最大化,还原三个按钮起作用)。如果此时再将Excel最小化然后再激活,那么所有按钮会恢复正常。

我已经测试了,哪怕是一个空白的windows form 做为这个下拉菜单界面,也会有这个问题,自己总结了下目前的情况有以下俩条可行思路,求指导:

一、当然我用的是Modeless的Show方法显示的这个下拉菜单,出现了这个bug。
这个情况下考虑过切换回Excel时,触发Activate事件,但是可惜的是Excel的WindowActivate是对同一个Excel内的Workbook的支持。当然WindowDeactivate也是一样的情况。
考虑通过继承NativeWindow 来实现一些东西,但是这方面技术本人不懂,菜鸟一个求指导。

二、如果用Modal的ShowDialog方法显示这个下拉菜单,在展现出来的情况下切换其他apps再切换回来是不会有问题的,但是ShowDialog方法不支持在该下拉菜单区域以外点击并捕获点击鼠标事件的,所以这个下拉框不会因为点击区域之外而自动消失。由于客户方安全策略,不能使用hook技术,windows api还是可以考虑的。

另外一个帖子已经给了100分,只要解决了的请俩边留言,200分全部送上。
http://bbs.csdn.net/topics/390648897/
...全文
245 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
学无止境Coding 2013-11-22
  • 打赏
  • 举报
回复
引用 2 楼 ChoasRules 的回复:
下拉菜单用windows form做是有特殊需求吗? 一般做ribbon上的菜单都是通过group对象下加一个Menu对象,然后Menu对象下加入button、checkbox、control等。 如果你是用vsto的话,基本没有你描述的那种情况。当然你描述的基本上其他人很难理解。
因为下拉菜单想做一个带Checkbox的多选下拉菜单,内容比较多,用的windows form里面的checklistbox
  • 打赏
  • 举报
回复
下拉菜单用windows form做是有特殊需求吗? 一般做ribbon上的菜单都是通过group对象下加一个Menu对象,然后Menu对象下加入button、checkbox、control等。 如果你是用vsto的话,基本没有你描述的那种情况。当然你描述的基本上其他人很难理解。
学无止境Coding 2013-11-22
  • 打赏
  • 举报
回复
求大侠帮忙看看啊,求救

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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