Elsewhere in the TipBank we show how you can display a custom popup menu on a TextBox control by subclassing the WM_CONTEXTMENU message that Windows sends the control when the user right-clicks on it. If you don’t like to resort to subclassing for such an easy job, you can use the following tip, taken from Microsoft Knowledge Base:
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) _ As LongPrivate Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, _ Y As Single) If Button = vbRightButton Then ' don't let the control display as "grayed" LockWindowUpdate Text1.hWnd ' disable the textbox, so that it can't react to mouse click Text1.Enabled = False ' show your custom menu PopupMenu mnuFile ' re-enable the control Text1.Enabled = True ' stop freezing the update LockWindowUpdate 0& End IfEnd Sub
Even better, it turns out that you don’t even need the LockWindowUpdate API function to avoid the TextBox control enter the “grayed” state, provided that you re-arrange the above statements and ensure that the TextBox control misses the opportunity to display the default Edit menu:
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, _ Y As Single) If Button = vbRightButton Then ' disable the textbox Text1.Enabled = False ' (this DoEvents seems to be optional) DoEvents ' re-enable the control, so that it doesn't appear as grayed Text1.Enabled = True ' show your custom menu PopupMenu mnuFile End IfEnd Sub