Удалить пробел вокруг ToolStripControlHost - PullRequest
2 голосов
/ 23 декабря 2011

Я пытаюсь удалить пустое пространство вокруг элемента управления 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

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

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);
0 голосов
/ 24 марта 2016

В большинстве ответов на этот вопрос я обнаружил, что разработчики перенаправили использование 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

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

  1. Добавьте ToolStripMenuItem в свое контекстное меню, как обычно было бы. В этом примере элемент называется «ToolStripMenuItem1».
  2. В соответствующем месте (конструктор или событие открытия контекстное меню), добавьте следующий код для замены DropDown ENTIRELY :

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

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

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

Ссылки по теме / Ссылки на источник:

0 голосов
/ 20 августа 2015

Попробуйте это

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...