这不是模态、非模态的问题。
在显示弹出式菜单时,调用 PopupMenu 方法后面的代码直到用户或者从菜单中选择了命令(这时,该命令的 Click 事件的代码比 PopupMenu 语句后面的代码先执行)或者取消该菜单时才能执行。此外,每次只能显示一个弹出式菜单,因此,如果已经显示了一个弹出式菜单或打开了一个下拉式菜单时,该方法的其它调用将被忽略。[应用MSDN的原话!]
也就是,如果你采用popupmenu方式显示一个窗体时,你就不能再使用popupmenu显示另外一个弹出式菜单。应为这时候的第一个popupmenu函数还没有返回。这是他会忽略掉另一个popupmenu的调用。

解决方案 »

  1.   

    其实, pasl(阿龙1)说的很对,实际情况真的是这样的,但解决办法要靠大家朋友了,
      

  2.   

    不使用popupmenu 来弹出菜单,使用api函数:
    TrackPopupMenu submenu, TPM_CENTERALIGN, x / Screen.TwipsPerPixelX, y / Screen.TwipsPerPixelY, 0, Me.hwnd, 0
    该函数的具体解释如下:Declare Function TrackPopupMenu& Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Rect)
    Declare Function TrackPopupMenuBynum& Lib "user32" Alias "TrackPopupMenu" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, ByVal lprc As Long) 
    说明 
        在屏幕的任意地方显示一个弹出式菜单 
    返回值 
        Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hMenu Long,弹出式菜单的句柄 
    wFlags Long,位置标志和鼠标追踪标志的组合,见下表 
    位置标志 说明 
    TPM_CENTERALIGN 菜单在指定位置水平居中 
    TPM_LEFTALIGN 菜单的左侧置于水平x坐标处 
    TPM_RIGHTALIGN 菜单的右侧置于水平x坐标处 
    TPM_LEFTBUTTON 鼠标左键标准运作方式 
    TPM_RIGHTBUTTON 用鼠标右键进行菜单追踪 
    x,y Long,这个点指定了弹出式菜单在屏幕坐标系统中的位置 
    nReserved Long,未使用,设为零 
    hwnd Long,用于接收弹出式菜单命令的窗口的句柄。应该使用窗体的窗口句柄——窗体中有一个菜单能象弹出式菜单那样接收相同的命令ID集 
    lprc Rect,用屏幕坐标定义的一个矩形,如用户在这个矩形的范围内单击,则弹出式菜单不会关闭。如单击弹出式菜单之外的任何一个地方,则会关闭菜单。可以设为NULL 
    注解 
    用这个函数创建的菜单,菜单中的命令ID并不与vb期望的那些相符
     
      

  3.   

    OK!可能是窗体Name搞的鬼·!·强烈建议popupmenu me.菜单名称