我正在尝试删除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);

发布于 2011-12-23 07:54:48
在这种情况下,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);发布于 2015-08-21 03:50:22
尝尝这个
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;发布于 2016-03-24 21:52:20
我发现这个问题的大多数答案都重定向开发人员使用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事实证明,这个弹出式菜单非常适合按原样应用下拉菜单(没有填充)到现有的上下文菜单。以下是步骤:
ToolStripMenuItem添加到上下文菜单中。在本例中,项被命名为"ToolStripMenuItem1“。在适当的位置(上下文菜单的构造函数或打开事件)中,添加以下代码以替换ENTIRELY
ToolStripMenuItem1.DropDown = New PopupBox(<your control here>)
显然,如果继承的对象没有访问protected ResizeRedraw属性并将所述值应用于PopupBox的构造函数中的Margin、Padding和AutoSize属性,ContextMenuStrip仍然会在下拉列表的左侧和右侧应用填充。所以没有捷径可走。
注释:CodeProject文章指出了一个GNU License,并且对PopupBox可以承载的内容有一些警告,因此请阅读文章以获取更多详细信息。
相关/源链接:
“链接)
https://stackoverflow.com/questions/8610193
复制相似问题