2011-12-22 193 views
2

我正尝试删除在contextmenu中托管日历控件的tooltripcontrolhost控件周围的空白区域。见附图和代码。删除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 2011-12-22 22:54:48

+0

@Lars,ContextMenuStrip正在与datagridview上的右键单击一起使用。 – Reafidy 2011-12-22 22:59:46

+0

@Lars,我的错误 - 我明白你的意思了。对**子菜单**本身使用toolstripdropdown而不是contextmenustrip。你可以发表你的评论作为解决方案吗? – Reafidy 2011-12-22 23:33:52

回答

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

尝试THI小号

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 2015-08-25 01:42:59

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. 在适当位置( 上下文菜单的构造或打开事件)中,添加以下代码来替换下拉完全

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

显然没有继承的对象访问保护ResizeRedraw属性并将所述值应用于PopupBox的构造函数中的Margin,PaddingAutoSize属性,但ContextMenuStrip仍应用填充在下拉菜单的左侧和右侧。所以没有捷径。

注意:在CodeProject上的文章表示GNU License,而且,有一些注意事项是什么可以通过PopupBox托管,所以阅读文章了解更多详情。

相关/来源链接: