2011-12-22 194 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託管,所以閱讀文章瞭解更多詳情。

相關/來源鏈接: