[英]Dynamically Remove ToolStripMenuItems from MenuStrip with parent's C#
[英]Dynamically adding ToolStripMenuItems to a MenuStrip (C#/ Winforms)
我實施了我的解決方案(基本解決方案),我很高興。
問題是當我使用'Add'方法向ToolStripItemCollection添加新項時,我得到一些重載......有意義的一個是字符串參數,圖像參數和EventHandler參數。
因為我的下拉列表將在RunTime中用作動態歷史記錄,這意味着它在編譯時將變為空。 這意味着我無法通過使用設計器表面的標准路徑添加事件處理程序(單擊時)。 我被迫使用上述的重載。
我的圖像對我沒用,但動態添加事件處理程序是我感興趣並需要幫助的。
網址: http : //msdn.microsoft.com/en-us/library/bxdt0s8t.aspx
沒有其他超載可以幫助我,所以我必須使用一個圖像......任何人都有任何想法來解決這個問題並告訴我如何完全滿足這個重載版本的add方法。
TIA。
更新:我在當前項目中再次執行此操作但使用更多更流暢的代碼但原理相同,在運行時動態添加事件處理程序。 我回家后會用一些示例代碼更新這個。
我這樣做的方法是創建一個ToolStripMenuItems
數組,並用我正在添加的項填充該數組。 我創建了一個方法來處理click事件,並讓它檢查我在運行時創建的每個項目的獨特之處。 您可以嘗試使用每個ToolStripMenuItem
的Name
或Tag
屬性。 然后在您要添加的菜單中的現場使用AddRange
。 所以你的代碼看起來像這樣:
private void BuildMenuItems()
{
ToolStripMenuItem[] items = new ToolStripMenuItem[2]; // You would obviously calculate this value at runtime
for (int i = 0; i < items.Length; i++)
{
items[i] = new ToolStripMenuItem();
items[i].Name = "dynamicItem" + i.ToString();
items[i].Tag = "specialDataHere";
items[i].Text = "Visible Menu Text Here";
items[i].Click += new EventHandler(MenuItemClickHandler);
}
myMenu.DropDownItems.AddRange(items);
}
private void MenuItemClickHandler(object sender, EventArgs e)
{
ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
// Take some action based on the data in clickedItem
}
出什么問題了:
ToolStripItem item = toolStripItems.Add("MyItem");
item.Click += new EventHandler(....);
我錯過了什么嗎?
我和Philip Wallace有類似的問題。 注意ToolStripItem和ToolStripMenuItem之間的區別非常重要。 我將ToolStripItems添加到ToolStripMenuItem的DropDownItems,它們會顯示,並且所有屬性都設置正確,並且可以在代碼中訪問,但它們不會顯示任何文本! 切換到ToolStripMenuItem解決了這個問題。
關於原始問題,我一直在使用空構造函數,並設置我需要的字段。 (我在.net 4.0的vb.net中,它不會讓我調用New ToolStripMenuItem()
因為它有一個MustInherit
標記,所以我創建了這個類:
Public Class DynamicToolStripMenuItem
Inherits ToolStripMenuItem
Public Sub New(value As Integer, text As String, handler As System.EventHandler)
MyBase.New()
Me.Text = text
Me.Visible = True
Me.Tag = value
AddHandler Me.Click, handler
End Sub
End Class
您只需為圖像傳遞null即可。
Menu.DropDownItems.Add(Text, null, EventHandler);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.