我如何添加控制动态上下文菜单(右键单击)
本文关键字:上下文 菜单 右键 单击 动态 控制 添加 何添加 | 更新日期: 2023-09-27 18:13:32
我正在编写代码编辑器(winforms),我只是想知道如何为contextmenu添加控件。我从一开始就没有使用designer。
现在我的右键事件的代码是:
private void rtb_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut"), new MenuItem("Copy"), new MenuItem("Paste") };
ContextMenu rightcontext = new ContextMenu(menuItems);
int xOffset = Cursor.Position.X - Dte.ActiveForm.Location.X;
int yOffset = Cursor.Position.Y - Dte.ActiveForm.Location.Y;
rightcontext.Show(Dte.ActiveForm, new Point(xOffset, yOffset));
}
}
现在已经工作了。但是问题是如何在contextmenu的list上添加控件。
特别是剪切,复制和粘贴。
像这样的代码?
if (rightcontext.menuItems.SelectedItems == "Cut")
{
rtb.Cut()
}
类似的东西,但它当然不会工作,因为contextmenu没有。selecteditems函数。
所以我的问题是如何在这些列表上添加控制。请帮忙:/非常感谢!
据我所知,您想处理单击菜单项吗?要做到这一点,您必须在菜单项中添加事件处理程序。
//create menu items with cunstructor that takes 2 arguemtns (string, and event handler)
MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut", new System.EventHandler(this.CutMenuItemClick)),
new MenuItem("Copy", new System.EventHandler(this.CopyMenuItemClick)),
new MenuItem("Paste", new System.EventHandler(this.PasteMenuItemClick)) };
,并像这样创建所有三个事件:
private void CutMenuItemClick(object sender, EventArgs e)
{
rtb.Cut();
}
创建菜单项时,首先在新的MenuItem[]{}构造函数之外创建它们。然后对每个菜单项使用事件Click.
的例子:
void SomeMethod()
{
MenuItem item = new MenuItem("Test");
item.Click += item_Click;
//Then your code..
MenuItem[] menuItems = new MenuItem[] { item /*Etc...*/ };
}
void item_Click(object sender, EventArgs e)
{
MessageBox.Show("Clicked!");
}
为菜单项定义事件处理程序
给你:
ContextMenu rightcontext;
private void rtb_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
MenuItem[] menuItems = new MenuItem[] { new MenuItem("Cut"), new MenuItem("Copy"), new MenuItem("Paste") };
rightcontext = new ContextMenu(menuItems);
rightcontext.MenuItems[0].Click += contextMenuItemClick;
rightcontext.MenuItems[1].Click += contextMenuItemClick;
rightcontext.MenuItems[2].Click += contextMenuItemClick;
int xOffset = Cursor.Position.X - Dte.ActiveForm.Location.X;
int yOffset = Cursor.Position.Y - Dte.ActiveForm.Location.Y;
rightcontext.Show(Dte.ActiveForm, new Point(xOffset, yOffset));
}
}
private void contextMenuItemClick(object sender, EventArgs e)
{
MenuItem m = (MenuItem)(sender);
if (m.Text.ToLower() == "copy")
{
// Some Code
}
}