事情只这样的:
  我在一个frmMain窗体的toolbar的click事件中用showmenu2 调出另外一个窗体menuform中的弹出式菜单.按设计意图来说,点击菜单后应该先执行菜单的click事件,设置click事件中的相应的参数,然后才去进行others的操作.但执行时却是每次都先执行完others的操作后才去执行click事件,故每次执行的结果都不对!!我在showmenu2 中用了"TrackPopupMenu(hSubMenu, 2, IX, IY, 0, MenuF.hwnd, menRect)"来弹出菜单.这个程序是从vb3升上来的,在vb3中正常,但在vb6中执行的顺序就不对了,不知道为什么!请高手指点!!!
.....
showmenu2 Me, x, Y, menuform, s1, s2, s3, s4
...others
.....

解决方案 »

  1.   

    showmenu2中应该是用Me.PopupMenu Form2.菜单名
      

  2.   

    还有这种事情,有点意思:)
    可能是VB的GUI组件不支持多线程的原因吧。
    用楼上的就行了。
    能用VB自带的就用自带的,在VB中用API有很多不确定性:)
      

  3.   

    TrackPopupMenu(hSubMenu, &H102, IX, IY, 0, MenuF.hwnd, menRect)行不行?
    或者在
    TrackPopupMenu(hSubMenu, 2, IX, IY, 0, MenuF.hwnd, menRect)"
    之后加一句
    DoEvents
      

  4.   

    呵呵,当然不介意,现在流行“UP有分”嘛。DoEvents转让控制权,以便让操作系统处理其它的事件。据我“猜测”,TrackPopupMenu在新版本的VB里面会建立一个新的线程,使得菜单的选择和程序运行不同步。TrackPopupMenu这句执行之后,程序不等待菜单选择就直接往下执行。DoEvents就可以让这段程序暂时休息一下,等待菜单的线程执行完毕。