我想将文本框中写的任何内容添加到菜单条中。在“文件”>“最近的搜索”中,我拥有。
我怎样才能以编程方式进行?我可以动态分配一个事件处理程序,以便当用户单击该子文件夹中的 X 项时,文本被复制回文本框?
编辑:我如何以编程方式调用 Busquedas Recientes 文件夹(图片中)
您可以通过利用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);
}
这是相当直截了当的。您可以执行以下操作:
ToolStripMenuItem menuItem
foreach (string text in collectionOfText)
{
ToolStripMenuItem foo = new ToolStripMenuItem(text);
foo.Click += new EventHandler(ClickEvent);
menuItem.DropDownItems.Add(foo);
}
随后,如果 Click 事件不起作用(我遇到了无法检测到正确菜单项的问题),您可以将“DropDownItemClicked”事件添加到 menuItem。并获取您单击的项目的文本:
private void DropedDownItemClickedEvent(object sender, ToolStripItemClickedEventArgs e)
{
string text = e.ClickedItem.Text;
}
我希望这会有所帮助。
哦,不要忘记删除事件。我忘记对我创建的所有动态菜单执行此操作,不知何故最终吃掉了我一半的记忆。:D