将你的菜单做在同一个FORM里,在该FORM里弹出时不用改动什么
在另一个FORM里要弹出菜单时要加上FORM名例:有FORM1,FORM2,菜单MENU1,MENU2 都在FORM1中,则在FORM2弹出菜单MEUN2时要改成  FORM2.MENU2

解决方案 »

  1.   

    to wgku(云霄) 我试过了,也是弹不出啊!!!
      

  2.   

    每次只能显示一个弹出式菜单。在已显示一个弹出式菜单的情况下,对后面的调用 PopupMenu 方法将不予理睬。在一个菜单控件正活动的任何时刻,调用 PopupMenu 方法均不会被理睬。
    由于你工程的模式窗体是用弹出式菜单调用的。模式窗体显示时它的所有者会暂停执行。所以主窗体的菜单没有Xie载。违反了PopupMenu执行规则所以调用无效。
      

  3.   

    VB可能是这样设计的,必须等前一个菜单处理完了再处理另一个菜单。而在Form1的菜单Click事件中Show vbModal导致线程挂起,不能结束第一个菜单,因此第二个菜单也得不到处理服务。
      

  4.   

    大家请注意关于这个问题在MSDN中的PopupMenu有说明:
    (最后一段):
    在显示弹出式菜单时,调用 PopupMenu 方法后面的代码直到用户或者从菜单中选择了命令(这时,该命令的 Click 事件的代码比 PopupMenu 语句后面的代码先执行)或者取消该菜单时才能执行。此外,每次只能显示一个弹出式菜单,因此,如果已经显示了一个弹出式菜单或打开了一个下拉式菜单时,该方法的其它调用将被忽略。注意最后一句:"如果已经显示了一个弹出式菜单或打开了一个下拉式菜单时,该方法的其它调用将被忽略。"
    因为使用模式窗体时,第一个弹出式菜单未结束(因为Click事件的代码被挂起未能执行完),第二个菜单的PopupMenu就被忽略掉了。解决方法:
    在第一个窗体的弹出式菜单的Click事件代码里不要Show第二个窗体,因该使用一个模块级变量做为标志,比如设置menu1clicked=true
    在form1的MouseUp(Down)事件中的Popupmenu之前menu1clicked=false,之后检查menu1clicked的值来决定是否显示窗体:
    private sub form1_MouseUp(......)
    ......
    menu1clicked=false
    PopupMenu mnutest1
    if menu1clicked then form2.show vb
    ......
    end sub