Я пытаюсь удалить пустое пространство вокруг элемента управления toolstripcontrolhost, в котором находится элемент управления календарем в контекстном меню. См. Прикрепленное изображение и код.
VB:
Dim menuItem As ToolStripMenuItem = New ToolStripMenuItem("MyMenu")
Dim calControl As New MonthCalendar
Dim controlHost As ToolStripControlHost = New ToolStripControlHost(calControl)
controlHost.Margin = Padding.Empty
controlHost.Padding = Padding.Empty
ContextMenuStrip1.Items.Add(menuItem)
menuItem.DropDown.Items.Add(controlHost)
С#:
ToolStripMenuItem menuItem = new ToolStripMenuItem("MyMenu");
MonthCalendar calControl = new MonthCalendar();
ToolStripControlHost controlHost = new ToolStripControlHost(calControl);
controlHost.Margin = Padding.Empty;
controlHost.Padding = Padding.Empty;
ContextMenuStrip1.Items.Add(menuItem);
menuItem.DropDown.Items.Add(controlHost);
A ToolStripDropDown
, вероятно, будет работать лучше в этом сценарии:
MonthCalendar calControl = new MonthCalendar();
ToolStripControlHost controlHost = new ToolStripControlHost(calControl);
controlHost.Margin = Padding.Empty;
controlHost.Padding = Padding.Empty;
ToolStripDropDown toolDrop = new ToolStripDropDown();
toolDrop.Padding = Padding.Emtpy;
toolDrop.Margin = Padding.Empty;
toolDrop.Items.Add(controlHost);
toolDrop.Show(this, location);
В большинстве ответов на этот вопрос я нашел перенаправление разработчиков на использование ToolStripDropDown
INSTEAD полосы контекстного меню. Тем не менее, для моего проекта я хотел выпадал из уже сложного контекстного меню. Раньше в моем проекте, для другого всплывающего окна, я получил простую всплывающую оболочку отсюда: http://www.codeproject.com/Articles/17502/Simple-Popup-Control. Это простое всплывающее окно было унаследовано от ToolStripDropDown
. Здесь основной код VB:
Public Class PopupBox
Inherits ToolStripDropDown
Private mHost As ToolStripControlHost = Nothing
Public ReadOnly Property Host As ToolStripControlHost
Get
Return mHost
End Get
End Property
Public Sub New(content As Control)
MyBase.New()
Me.ResizeRedraw = True
Me.Margin = Padding.Empty
Me.Padding = Padding.Empty
Me.AutoSize = True
Me.mHost = New ToolStripControlHost(content)
Me.mHost.Margin = Padding.Empty
Me.mHost.Padding = Padding.Empty
Me.mHost.AutoSize = True
Me.Items.Add(Me.mHost)
End Sub
End Class
Оказывается, что это всплывающее окно идеально подходит для использования как-чтобы применить раскрывающийся список (без дополнения) к существующему контекстному меню. Вот шаги:
ToolStripMenuItem
в свое контекстное меню, как обычно
бы. В этом примере элемент называется "ToolStripMenuItem1". ToolStripMenuItem1.DropDown = New PopupBox(<your control here>)
По-видимому, без унаследованного объекта, обращающегося к защищенному свойству ResizeRedraw
И применяя указанные значения к свойствам Margin
, Padding
и AutoSize
в конструкторе PopupBox
, все еще применяется ContextMenuStrip
отступ слева и справа от выпадающего меню. Поэтому нет ярлыка.
ПРИМЕЧАНИЕ. В статье CodeProject указано Лицензия GNU, а также что есть некоторые предостережения в отношении того, что может быть размещенный PopupBox, поэтому читайте статью для более подробной информации.
Связанные/исходные ссылки:
Попробуйте это
ToolStripMenuItem menuItem = new ToolStripMenuItem("MyMenu");
MonthCalendar calControl = new MonthCalendar();
ToolStripControlHost controlHost = new ToolStripControlHost(calControl);
controlHost.Margin = Padding.Empty;
controlHost.Padding = Padding.Empty;
ContextMenuStrip1.Items.Add(menuItem);
ToolStripDropDown dropDown = new ToolStripDropDown();
dropDown.Items.Add(controlHost);
menuItem.DropDown = dropDown;