到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();
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并且重新显示,会触发这个事件的。
发两个效果图在这里吧!
这是汉字的: