如何程序化地向菜单栏添加内容?

8
我想将文本框中的任何内容添加到菜单栏。在“文件”>“最近搜索”中,我有这样的操作。
我如何以编程方式实现?并且我可以动态地分配事件处理程序,以便当用户单击该子文件夹中的X项目时,文本被复制回文本框吗?
编辑:如何以编程方式调用文件夹“Busquedas Recientes”(见图片)

你使用哪个IDE或平台/语言?(例如,C与Win32 API,.NET Framework上的C#等) - Achimnol
2个回答

10

通过利用事件处理程序中的object sender参数,您可以实现此操作。由于大部分是我凭记忆写的,所以我只是在猜测它是否会编译,但它应该能帮助您入门。

void AddMenuItem(string text, string action)
{
   ToolStripMenuItem item = new ToolStripMenuItem();
   item.Text = text;
   item.Click += new EventHandler(item_Click);
   item.Tag = action;

   //first option, inserts at the top
   //historyMenu.Items.Add(item);

   //second option, should insert at the end
   historyMenuItem.DropDownItems.Insert(historyMenuItem.DropDownItems.Count, item);
}

private void someHistoryMenuItem_Click(object sender, EventArgs e)
{
   ToolStripMenuItem menuItem = sender as ToolStripMenuItem;

   string args = menuItem.Tag.ToString();

   YourSpecialAction(args);
}

第一种方法有点可行。搜索被添加了,但是在最顶层。我需要它被添加到这个层次结构中:文件 > 最近搜索 > 这里放东西。有什么帮助吗? - Sergio Tapia

5

这很简单,你可以按照以下步骤操作:

ToolStripMenuItem menuItem

foreach (string text in collectionOfText)
{
    ToolStripMenuItem foo = new ToolStripMenuItem(text);
    foo.Click += new EventHandler(ClickEvent);
    menuItem.DropDownItems.Add(foo);
}

随后,如果点击事件无法正常工作(我遇到过它不能检测到正确的菜单项的问题),您可以向menuItem添加“DropDownItemClicked”事件,然后获取您所点击的菜单项的文本,代码如下:
private void DropedDownItemClickedEvent(object sender, ToolStripItemClickedEventArgs e)
{
    string text = e.ClickedItem.Text;
}

希望这可以帮到您。

哦,别忘了也要删除事件。我曾经创建了很多动态菜单,却忘记删除事件,结果吃掉了一半的内存。:D


哈哈,:P 这个评论很赞!帮我省去了另一个问题 xD - Sergio Tapia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接