放在 text1_mousedown 事件中即可

解决方案 »

  1.   

    还是不行。修改后在text1中点右键的时候在最左上角弹出系统默认菜单,少量时候可在text1中正确显示自己编写的菜单。
      

  2.   

    Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
    Text1.Enabled=False
    PopupMenu youjian
    Text1.Enabled=True
    End If
    End Sub
      

  3.   

    RichTextBox的AutoVerbMenu 是决定显示不显示系统菜单的。
    默认值是不显示。
    autoverbmenu=ture 显示这样在他的MOUSEUP事件里放上你的代码
    显示的就是你的菜单了
      

  4.   

    Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
    Text1.Enabled=False
    PopupMenu youjian
    Text1.Enabled=True
    End If
    End Sub可以实现。用mouseup事件不行!
    有谁可以解释一下为什么要用mousedown事件才可以。而且必须是text1.enabled=false才行吗?
    回复人: heimayi(黑蚂蚁) (  ) 信誉:100 
    原来我就是用richtextbox编写的,现在我想用textbox重新写一次。
    感觉难度大了很多:(
      

  5.   

    1.取得Text控件的窗口函数地址
    OldWindowProc=GetwindowLong(textbox.hwnd,GWL_WNDPROC)
    2.用自定义函数取代
    setwindowlong(textbox.hwnd,GWL_WNDPROC,address of YourFunction)
    这个函数必须写在模块里,函数原形:
    Public Function SubClass1_WndMessage(ByVal hWnd As OLE_HANDLE, ByVal Msg As OLE_HANDLE, ByVal wp As OLE_HANDLE, ByVal lp As Long) As Long
    on error resume next    
    If Msg <> WM_CONTEXTMENU Then
           SubClass1_WndMessage = CallWindowProc(OldWindowProc, hWnd, Msg, wp, lp)
           ' 如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理
           Exit Function
        End If
        SubClass1_WndMessage = True
    End Function
    在form_unload事件里加上
    Call SetWindowLong(Text1.hWnd, GWL_WNDPROC, OldWindowProc)
    一些声明:
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    小心使用,VB在消息函数里不支持断点和debug.stop,否则会出错,你可以做成Dll,别忘了加 on error resume next