Удалить пробел вокруг ToolStripControlHost

2

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

Изображение 174551

  • 0
    Есть ли причина, по которой вы используете ContextMenuStrip для этого, а не просто ToolStripDropDown?
  • 0
    @Lars, ContextMenuStrip используется при щелчке правой кнопкой мыши по представлению данных.
Показать ещё 1 комментарий
Теги:
winforms

3 ответа

1
Лучший ответ

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

В большинстве ответов на этот вопрос я нашел перенаправление разработчиков на использование 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".
  • В соответствующем месте (конструктор или событие открытия   контекстное меню), добавьте следующий код, чтобы заменить DropDown ENTIRELY:

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

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

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

Связанные/исходные ссылки:

0

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

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
    Этому вопросу пять лет, но все равно спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню