自画菜单中如何触发MeasureItem事件的问题及解决办法
目前的gsp workflow designer是有国际化支持的:多语言、数字、日历等。今天刚刚把多语言加上。默认的designer是english的,菜单显示正常。但是切换到中文后,主菜单的汉字都挤到一起了。如果中文是默认语言,那么切换到english之后,english的菜单现实的宽度和汉字的时候是一样的。所以,我就断定,MeasureItem Event没有被触发。我设置的断点没有到达,也证实了这点。
到google上一开始搜索:how to raise MeasureItem event in a menu,未果。只找到了一个listbox类似的问题。后来突然想到,应该这么搜索:fired MeasureItem event in a menu,找到了和上面类似的解决方法。然后自己试验了一下,代码如下:
ArrayList list = new ArrayList();
foreach(MenuItem mi in mainmenu.MenuItems)list.Add(mi);
Mainmenu.MenuItems.Clear();
foreach(MenuItem mi in list)mainmenu.MenuItems.Add(mi);
// mainmenu是我扩展的,所有的redraw都在里面。Init方法是为了对每个menuitem进行ownerdraw标志的设置,以及对于DrawItem/MeasureItem两个event进行handle
mainmenu.Init();
嗬嗬,然后就搞定了。问题原因,应该是:MeasureItem这个event只有在第一次显示的时候或者“必要”的时候,才被触发。其他的时候,没有反应。而添加item到menu的collection并且重新显示,会触发这个事件的。
发两个效果图在这里吧!

这是汉字的:
到google上一开始搜索:how to raise MeasureItem event in a menu,未果。只找到了一个listbox类似的问题。后来突然想到,应该这么搜索:fired MeasureItem event in a menu,找到了和上面类似的解决方法。然后自己试验了一下,代码如下:






嗬嗬,然后就搞定了。问题原因,应该是:MeasureItem这个event只有在第一次显示的时候或者“必要”的时候,才被触发。其他的时候,没有反应。而添加item到menu的collection并且重新显示,会触发这个事件的。
发两个效果图在这里吧!
这是汉字的:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?