2012-04-06 57 views
2

我相信这个答案已经发布过。原谅我,因为我想我只是没有想到正确的搜索字符串。c#如何在运行时添加contextMenuStrip项目?

我有一个上下文菜单条被分配到我的拨号盘的托盘图标上。这个想法是让用户设置各种数字并从菜单中选择用户定义的号码并启动拨号。

所以菜单弹出Presets, Setup,& Exit。我想要预设菜单打开列出用户定义号码的新树。每次应用程序加载时,我也希望这从xml文件中填充。

我的问题是,我不知道如何动态填充子菜单项并给它一个函数。

那么我如何在启动时将预设的用户自定义号码添加到预设 - >(userNumber1, usernumber2, userNumber3),然后在点击时调用dial()函数?


所以我找到了如何添加到列表中...我现在觉得很傻,对于任何想要知道该名单的人,该名单中的名称都会被给出。 IM我的情况下,name属性是“presetsToolStripMenuItem”

所以将项目添加到它调用的名字

presetsToolStripMenuItem.DropDownItems.Add(string text) 

没有继续前进。我现在试图弄清楚如何将事件分配给新添加的函数。我确实找到了

presetsToolStripMenuItem.DropDownItems.Add(string text, image, eventargs) 

我正在为这个挣扎。也许我需要停下来,稍后再回来。也许如果有人能够给我提供一个使用这条线来调用function();的例子,我会非常感激。

+0

WPF或Windows窗体? – Polity 2012-04-06 02:35:14

+0

这是一个Windows窗体应用程序。 – eatumup 2012-04-06 03:17:41

回答

4

对于任何感兴趣的人,我想出了在运行时添加上下文菜单项以及调用函数的解决方案。

如前所述,要将子菜单项添加到父类别,请使用parent.name。所以在我的情况下,预设的菜单项名称是“presetsToolStripMenuItem”

要添加函数,我使用了3参数方法。

ToolStripMenuItem.DropdownItems.Add("string name", image, eventargs); 

所以我的代码如下所示:

presetsToolStripMenuItem.DropDownItems.Add("added2", null, disp); 

void disp(object sender, EventArgs e) 
    { 
     MessageBox.Show("It works!"); 
    } 
+1

如果这个列表是在用户的行为中填充的,那么在添加项目以避免重复之前,您将希望使用'ToolStripMenuItem.DropdownItems.Clear()'预备列表。 – Wayne 2016-09-17 20:00:42