2011-12-22 4 views
2

Я пытаюсь удалить пустое пространство вокруг элемента управления toolstripcontrolhost, в котором находится элемент управления календарем в контекстном меню. См. Прикрепленное изображение и код.Удалить белое пространство вокруг 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) 

C#:

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); 

enter image description here

+0

Есть ли причина, вы используете ContextMenuStrip, чтобы сделать это а не просто ToolStripDropDown? – LarsTech

+0

@Lars, ContextMenuStrip используется с правым щелчком мыши по datagridview. – Reafidy

+0

@Lars, моя ошибка - я понимаю, что вы имеете в виду сейчас. Использование toolstripdropdown вместо contextmenustrip для ** подменю ** непосредственно. Можете ли вы оставить свой комментарий в качестве решения, пожалуйста. – Reafidy

ответ

1

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); 
0

Try Тхи s

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; 
+0

Этот вопрос пять лет, но спасибо в любом случае. – Reafidy

0

Большинство ответов на этот вопрос я нашел разработчики переадресацией использовать ToolStripDropDownВМЕСТО полосы контекстного меню. Тем не менее, для моего проекта я хотел выпадал из уже сложного контекстного меню. Раньше в моем проекте, для другого всплывающего окна, я получил простую всплывающую оболочку отсюда: 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 

Оказывается, что это всплывающее окно идеально подходит для использования как есть, чтобы применить выпадающий (без дополнения) к существующему контекстного меню. Вот шаги:

  1. Добавить ToolStripMenuItem в вашем контекстном меню, как обычно будет. В этом примере элемент называется «ToolStripMenuItem1».
  2. В соответствующем месте (конструктора или открытия случае контекстного меню), добавьте следующий код, чтобы заменить DropDown ПОЛНОСТЬЮ:

ToolStripMenuItem1.DropDown = New PopupBox(<your control here>)

По-видимому, не унаследованный объект, обращающийся к protected ResizeRedraw property И применение указанных значений к Margin, Padding и AutoSize свойствам в конструкторе PopupBox, ContextMenuStrip по-прежнему применяется прокладка слева и справа от выпадающего меню. Таким образом, нет ярлыка.

ПРИМЕЧАНИЕ: В статье CodeProject указывает на GNU License, а также, что некоторые оговорки к тому, что может быть организовано PopupBox, так что читайте статью для более подробной информации.

Связанные/Источник ссылки:

Смежные вопросы