首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# ContextMenu EventArgs

C# ContextMenu EventArgs
EN

Stack Overflow用户
提问于 2014-08-12 12:24:21
回答 2查看 2.9K关注 0票数 0

当为上下文菜单构建单击事件方法时,Event Args在单击事件上传递什么?

我试图为一个树列表构建一个上下文菜单,这样当我右键单击一个文件夹时,我可以选择创建一个新的文件夹。我想知道的是如何传递被点击的文件夹,这样我就可以在正确的位置创建文件夹。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
    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)
    {

    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 12:35:21

您可以简单地创建一个匿名事件处理程序,它将捕获任何相关数据并将其传递给另一个方法:

代码语言:javascript
复制
var menuItem = new MenuItem(
    "Create New Folder",
    // the following lambda will capture the `e` parameter
    (sender, args) => DoSomething(e.Node, "stuff just happened"));
票数 4
EN

Stack Overflow用户

发布于 2014-08-12 12:44:45

另一种方法是创建您自己的自定义MenuItem,如下所示:

代码语言:javascript
复制
public class CustomMenuItem : MenuItem
{
    public TreeNode SelectedTreeNode { get; set; }

    public CustomMenuItem(string text, EventHandler onClick, TreeNode treeNode) : base(text, onClick)
    {
        SelectedTreeNode = treeNode;
    }
}

因此,与其像这里这样创建菜单项目,不如:

代码语言:javascript
复制
cm.MenuItems.Add(new MenuItem("Create New Folder",CreateNewFolder_Click));

溜达:

代码语言:javascript
复制
cm.MenuItems.Add(new CustomMenuItem("Create New Folder", CreateNewFolder_Click, e.Node));

然后,您将在您的方法中获得这样的TreeNode:

代码语言:javascript
复制
private void CreateNewFolder_Click(object sender, EventArgs e)
{
    CustomMenuItem customMenuItem = sender as CustomMenuItem;
    MessageBox.Show(customMenuItem.SelectedTreeNode.FullPath);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25264244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档