当使用弹出菜单模式显示一窗体后,在这个窗体中再使用弹出菜单就弹不出来,请问在不改变这个前提下(模式显示窗体)有什么办法可以解决这个问题?谢谢!

解决方案 »

  1.   

    楼主说的是哪种情况啊,是不是先用form1的弹出菜单调用form2.show 1
    然后又想在form1上点右键再弹出菜单啊?
    这个是不可能的啊,有模式的就锁定窗体了,此时的form1没办法获得焦点了,把form2关掉之后form1的弹出菜单仍是可用的...
    楼主说的是什么情况?
      

  2.   

    我说的是form1也是用弹出菜单调用(模式显示)的,然后在form1上再用弹出菜单调用form2,这样使用弹出菜单就使用不了拉
      

  3.   

    大家都误解了我的意思了,我说的是使用弹出菜单调用(模式显示)form1,然后在form1上再使用弹出菜单,这样使用就使用不了弹出菜单了!  谢谢!
      

  4.   

    看了三遍,终于看明白了。呵呵。确实说起来有点绕嘴。但是我没发现类似情况啊!我尝试了你说的情况,没发现问题。
    你是用什么方式弹出菜单的?PopupMenu吗?
    是什么事件引起探出窗口的呢?Command1_Click之类的吗?还请多贴一些细节:)
      

  5.   

    ***********Form1*****************
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 2 Then
            PopupMenu menu_main
        End If
    End SubPrivate Sub showf2_Click()
        Form2.Show 1
    End Sub
    ***********Form2*****************
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 2 Then
            PopupMenu menu123
        End If
    End Sub他说的是这种情况,menu123显示不出来
      

  6.   

    我说的是这样的:在一窗体(Form0)中使用弹出菜单(使用方法:PopupMenu PMenu)中某一菜单项调用Form1(这里是使用模式显示Form1),再在Form1中的某一事件中使用另一弹出菜单调用其他的Form,此时弹出菜单显示不出来。    我知道如果不是模式显示Form1就没有问题,windows不允许同时弹出两个菜单(既在一个弹出菜单还没有消亡再弹出另外的菜单是不行的,我就想请教有什么办法可以解决这个问题呢(不改变窗体的模式显示)?  谢谢!
      

  7.   

    menu123是肯定可以显示不出来,
      

  8.   

    对,就想”maskdata(凋零|好孩子不抢分“说的那样
      

  9.   

    我也遇到这种情况了,就是显示不出来,哪位能解决啊,小弟也学习学习……
    两个窗口里都有弹出菜单,在form1中使用弹出菜单弹出Form2,然后,form2里的弹出菜单就不能显示,哈哈,我应该说清楚了吧
    楼主是不是跟我的一样啊
    学习学习……
      

  10.   

    加一个Timer1,设置:Interval = 1,Enabled = False。form0的代码如下:Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 2 Then
            PopupMenu menu_main
        End If
    End SubPrivate Sub sdas_Click()
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        Form1.Show 1
        Timer1.Enabled = False
    End Sub
      

  11.   

    没讲清楚~~~~sdas就是一个菜单项,弹出form1的选项。form1里面基本不用动,应该可以了。
      

  12.   

    能不能详细介绍一下,没有看明白,timer起什么作用呢?谢谢!
      

  13.   

    正像你说的。form0弹出模式窗口form1后,form0停止运行,菜单不能把上关闭。这样form1里面就不能再打开同一个菜单。用timer应该只是方法之一,就是当点击菜单项之后,Timer1被激活,而不是马上弹出form1。当菜单关闭之后,Timer1才会响应,从而打开form1。
      

  14.   

    in form2
    Public form1mode As IntegerPrivate Sub menu_Click()
    form1mode = 1
    Form1.ShowEnd Sub
    in form1
    Private Sub Form_Load()
    Form1.Show form1mode
    End Sub
      

  15.   

    似乎timer就是一个延时的作用吧,好神奇
      

  16.   

    还想请教一下:Timer控件在这里起到什么作用呢?这个内部机制是怎样的呢?谢谢!
      

  17.   

    我以为,可能windows系统不允许同时弹出两个菜单,而原先的代码因为在showf2_Click()事件中执行show 1 之后系统无法关闭menu_main,所以form2中无法弹出菜单.用timer控件起到给系统关闭menu_main时间的做用吧.{ 个人猜想,还请fanzai(帆仔)赐教 : ) }
      

  18.   

    嗯?呵呵,我还没说清楚?用timer应该只是方法之一。
    当点击菜单项之后,如果马上弹出form1会造成form0运行暂停,导致菜单不能关闭。而现在把弹出方式改成激活Timer1,而不是马上弹出form1,这样form0就不会被暂停了。
    Timer1的响应时间设置成了1(1毫秒),这样Timer1会马上作出反应。但是由于VB的具体运行机制,在VB中某一个操作没有完成之前,一般不会响应更多的其他事件。所以,只有当菜单关闭之后,VB程序空闲了,Timer1才会响应,从而打开form1。
    Timer1的代码部分也很简单,就是弹出窗口,然后将自己禁用(避免无限制的弹出)。另外,使用API的方法应该也很可取。我还没有具体尝试。如果需要我可以试验一下。
      

  19.   

    补充一点,用Timer1弹出form1的时候,form0还是被暂停了的。只是这个时候暂停不会有什么不良影响。
    :)
      

  20.   

    谢拉!不知道你使用API的思路是怎样?
      

  21.   

    一下是copy来的例子,使用API可以在菜单关闭后得到用户选择的选项,从而避免多次打开菜单的问题。'Example submitted by Leondias Frost ([email protected])
    Const MF_CHECKED = &H8&
    Const MF_APPEND = &H100&
    Const TPM_LEFTALIGN = &H0&
    Const MF_DISABLED = &H2&
    Const MF_GRAYED = &H1&
    Const MF_SEPARATOR = &H800&
    Const MF_STRING = &H0&
    Const TPM_RETURNCMD = &H100&
    Const TPM_RIGHTBUTTON = &H2&
    Private Type POINTAPI
        x As Long
        y As Long
    End Type
    Private Declare Function CreatePopupMenu Lib "user32" () As Long
    Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal HWnd As Long, ByVal lptpm As Any) As Long
    Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
    Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Dim hMenu As Long
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim Pt As POINTAPI
        Dim ret As Long
        hMenu = CreatePopupMenu()
        AppendMenu hMenu, MF_STRING, 1, "Hello !"
        AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, 2, "Testing ..."
        AppendMenu hMenu, MF_SEPARATOR, 3, ByVal 0&
        AppendMenu hMenu, MF_CHECKED, 4, "TrackPopupMenu"
        GetCursorPos Pt
        ret = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD Or TPM_RIGHTBUTTON, Pt.x, Pt.y, Me.HWnd, ByVal 0&)
        DestroyMenu hMenu
        Debug.Print ret
    End Sub