用鼠标右键单击时 TextBox 控件上,显示其默认弹出式菜单。Visual Basic 不具有属性或直接将禁用此功能的任何其他内置的机制。但是,该控件的 有效 属性设置为 False 防止菜单显示,尽管这使用户可以看到该控件被禁用。
一个解决方法是使用 Windows LockWindowUpdate 应用程序编程接口 (API) 结合 可用 属性。LockWindowUpdate 函数禁用或重新-启用指定窗口中的绘图。该操作完成后该控件是重新启用,和 LockWindowUpdate API 调用第二次以恢复该控件的绘图。 创建示例项目的步骤在 Visual Basic 中开始一个新的标准 EXE 项目。默认情况下创建 Form1。向 Form1 中添加 文本框 控件。从 工具 菜单中单击 菜单编辑器 并创建一个名为 Form1 上的 mnuPopUp 的菜单。清除 可见 复选框,并添加项,如下所示:标题: 名称
文件: mnuPopup
新建: mnuOne
打开: MnuTwo 下面的代码添加到 Form1 的代码窗口: Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hwndLock As Long) As Long
Private Sub mnuOne_Click()
Text1.Text = "Menu One was clicked"
End Sub
Private Sub mnuTwo_Click()
Text1.Text = "Menu two was clicked"
End Sub
Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = vbRightButton Then
' Avoid the 'disabled' gray text by locking updates
LockWindowUpdate Text1.hWnd
' A disabled TextBox will not display a context menu
Text1.Enabled = False
' Give the previous line time to complete
DoEvents
' Display our own context menu
PopupMenu mnuPopup
' Enable the control again
Text1.Enabled = True
' Unlock updates
LockWindowUpdate 0&
End If
End Sub
保存并运行该项目。用鼠标右键单击文本 1。显示自定义的菜单。不显示标准的编辑菜单。