当为上下文菜单构建单击事件方法时,Event Args在单击事件上传递什么?
我试图为一个树列表构建一个上下文菜单,这样当我右键单击一个文件夹时,我可以选择创建一个新的文件夹。我想知道的是如何传递被点击的文件夹,这样我就可以在正确的位置创建文件夹。
到目前为止,这就是我所拥有的:
private void qList_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Right)
{
ContextMenu cm = new ContextMenu();
//folder or file
if(e.Node.ImageKey == "folder")
{
cm.MenuItems.Add(new MenuItem("Create New Folder",CreateNewFolder_Click));
cm.MenuItems.Add("Create New QPack");
cm.MenuItems.Add("Remove New Folder");
e.Node.ContextMenu = cm;
}
else if (e.Node.ImageKey == "files")
{
cm.MenuItems.Add("Create QPack", CreateNewQPack_Click);
cm.MenuItems.Add("Remove QPack");
e.Node.ContextMenu = cm;
}
}
}
private void CreateNewFolder_Click(object sender, EventArgs e)
{
}
private void CreateNewQPack_Click(object sender, EventArgs e)
{
}发布于 2014-08-12 12:35:21
您可以简单地创建一个匿名事件处理程序,它将捕获任何相关数据并将其传递给另一个方法:
var menuItem = new MenuItem(
"Create New Folder",
// the following lambda will capture the `e` parameter
(sender, args) => DoSomething(e.Node, "stuff just happened"));发布于 2014-08-12 12:44:45
另一种方法是创建您自己的自定义MenuItem,如下所示:
public class CustomMenuItem : MenuItem
{
public TreeNode SelectedTreeNode { get; set; }
public CustomMenuItem(string text, EventHandler onClick, TreeNode treeNode) : base(text, onClick)
{
SelectedTreeNode = treeNode;
}
}因此,与其像这里这样创建菜单项目,不如:
cm.MenuItems.Add(new MenuItem("Create New Folder",CreateNewFolder_Click));溜达:
cm.MenuItems.Add(new CustomMenuItem("Create New Folder", CreateNewFolder_Click, e.Node));然后,您将在您的方法中获得这样的TreeNode:
private void CreateNewFolder_Click(object sender, EventArgs e)
{
CustomMenuItem customMenuItem = sender as CustomMenuItem;
MessageBox.Show(customMenuItem.SelectedTreeNode.FullPath);
}https://stackoverflow.com/questions/25264244
复制相似问题