自画菜单中如何触发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并且重新显示,会触发这个事件的。
发两个效果图在这里吧!

这是汉字的:
posted @ 2004-07-30 15:42  鞠强  阅读(2075)  评论(3编辑  收藏  举报

hello

world