自画菜单中如何触发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并且重新显示,会触发这个事件的。

发两个效果图在这里吧!

menu4_1

这是汉字的:

menu4_2

posted on 2004-07-30 15:42 鞠强 阅读(69) 评论(2)



2004-07-30 15:43 juqiang

晕!图片压缩后,怎么有“断痕”了?

2004-07-31 18:25 3188.NET

想请教如何在程序在运行实现你上面设计的效果

就像上面修改属性和和移动更改控件大小的效果

Contributors: FHL