Отключить контекстное меню по умолчанию
Я создал пользовательский выпадающий список toolstrip, чтобы он отображал контекстное меню. Вот этот код.
Option Strict Off Option Explicit On <System.ComponentModel.Description("Custom Control to add a context menu to a toolstrip combobox")> _ Public Class MyToolStripComboBox Inherits Forms.ToolStripComboBox Private mContextMenu As ContextMenuStrip ' allows a context menu to be added to a toolstrip combobox control Public Property ContextMenuStrip() As ContextMenuStrip Get Return mContextMenu End Get Set(ByVal iConMenu As ContextMenuStrip) mContextMenu = iConMenu End Set End Property Protected Overrides Sub OnMouseDown(e As System.Windows.Forms.MouseEventArgs) MyBase.OnMouseDown(e) If e.Button = MouseButtons.Right Then If mContextMenu IsNot Nothing Then Dim iBounds = Me.Bounds Dim iParLoc As Point = Parent.Location Dim iPt As Point = iParLoc iPt.X += iBounds.Left iPt.Y += iBounds.Bottom mContextMenu.Show(Parent.PointToScreen(iPt)) End If End If End Sub End Class
Он работает нормально, за исключением того, что полоса контекстного меню по умолчанию (например, вырезать, копировать, вставить...) отображается поверх него.
Как отключить полосу контекстного меню по умолчанию?
Я определил источник проблемы. С помощью приведенного выше кода, устанавливающего координату Y, контекстное меню по умолчанию будет отображаться поверх контекстного меню конкретного элемента управления (mContextMenu). Если эта линия отмечена или если координата Y установлена в
e.Location.Yконтекстное меню по умолчанию не отображается. Кроме того, если mContextMenu установлен дисплей на
e.Location
mContextMenu.Show(Parent.PointToScreen(e.Location)), контекстное меню по умолчанию будет отображаться в элементе управления, а mContextMenu будет отображаться в месте на содержащей полосе инструментов (в левом конце полосы инструментов). Я не знаю, почему это происходит. Мне бы хотелось, чтобы кто-нибудь объяснил мне это поведение.
Проблема с этим заключается в том, что пользователь не может видеть содержимое элемента управления при отображении контекстного меню. Он находится прямо над пультом управления.
Что я уже пробовал:
В форме, которая использует этот элемент управления, я установил toolstrip контейнера в новое (пустое) контекстное меню при запуске:
tsMain.ContextMenuStrip = New ContextMenuStrip
Кроме того, я создал новое пустое контекстное меню и назначил его tsMain в design.
Ни один из этих методов не предотвращает отображение полосы контекстного меню по умолчанию, когда я щелкаю правой кнопкой мыши на этом элементе.
Kevin Brady
Я опубликовал новый вопрос об использовании этого. https://www.codeproject.com/Questions/1226184/Get-the-embedded-source-control-object