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

    这是汉字的:
  • 相关阅读:
    word2010怎么把白色方框变成黑色方框?
    Ubuntu 14.04 安装 Sublime Text 3
    安装xmlspy之后,链接及邮箱等都用这个软件打开,怎样取消?
    SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
    ROM和RAM区别
    shell脚本分析一
    重要网址
    vi/vim
    dump_stack使用
    BIOS、BootLoader、uboot对比
  • 原文地址:https://www.cnblogs.com/juqiang/p/28644.html
Copyright © 2020-2023  润新知