为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法知道在左键单击其 ContextMenuStrip 项目之一并且该项目

有没有办法知道在左键单击其 ContextMenuStrip 项目之一并且该项目

C#
一只萌萌小番薯 2021-06-04 09:13:04
orhtej2 建议我的问题可能是确定在 ContextMenuStrip 上使用了什么控件。这几乎是一个重复,但我的场景有一个显着差异。有关详细信息,请参阅我修改后的问题和我的答案。请参阅下面的我的代码。我的目标是更清楚地确定在左键单击其 ContextMenuItems 之一后右键单击哪个 TreeNode。现在,当我右键单击两个子节点之一时, 中的if语句TreeView1_NodeMouseClick会将单击TreeNode的treeViewClickedNode TreeNode对象加载到全局对象中。然后,当我左键单击两者之一时contextMenuStripChildNode ToolStripMenuItem,该DocumentActionToolStripMenuItem_CheckStateChanged方法被触发。然后我可以检查检查状态。如果它被选中,我可以对treeViewClickedNode TreeNode.我的问题:是否有一种更清晰的方法来确定在左键单击其 ContextMenuStrip 项目之一后右键单击哪个 TreeNode,即,是否有办法取消全局变量treeViewClickedNode?注意:我在设计器中所做的唯一一件事就是放置treeview1在 上Form1,将其停靠到Form1并将“treeview1”设置NodeMouseClick为TreeView1_NodeMouseClickusing System;using System.Windows.Forms;namespace WindowsFormsApp_Scratch{    public partial class Form1 : Form    {        TreeNode treeViewClickedNode;        ContextMenu mnu = new ContextMenu();        public Form1()                {            InitializeComponent();            // Create the root node.            TreeNode treeNodeRoot = new TreeNode("Documents");            // Add the root node to the TreeView.            treeView1.Nodes.Add(treeNodeRoot);            //Create and add child 2 nodes each with a two item ContextMenuStrip.            string[] childNodeLabels = { "document1.docx", "document2.docx"};            string[] contextItemLabels = { "Action A", "Action B" };            foreach (String childNodeLabel in childNodeLabels)            {                TreeNode treeNode = treeNodeRoot.Nodes.Add(childNodeLabel);                // Create a ContextMenuStrip for this child node.                ContextMenuStrip contextMenuStripChildNode = new ContextMenuStrip                {                    ShowCheckMargin = true,                    ShowImageMargin = false                };
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

该For a ContextMenuStrip答案为SO问题的部分确定哪些控制的ContextMenuStrip被使用上 几乎回答我的问题。


但是,在我的情况下,我想处理ContextMenuStrip项目右键单击并在更改时访问ContextMenuStrip项目,因此我的代码使用项目事件方法而不是项目事件方法。因此,我需要将发件人强制转换为 a而不是 。除此之外,我使用SO 问题中的部分答案确定在我的事件方法中使用了 ContextMenuStrip 的哪个控件:CheckStateCheckStateContextMenuStrip_CheckStateChangedContextMenuStrip_ClickToolStripMenuItemToolStripItemFor a ContextMenuStripDocumentActionToolStripMenuItem_CheckStateChanged


private void DocumentActionToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)

{

    Control treeNodeControl;


    ToolStripMenuItem toolStripMenuItem = (ToolStripMenuItem)sender;


    // if the ToolStripMenuItem item is owned by a ContextMenuStrip ...

    if (toolStripMenuItem.Owner is ContextMenuStrip contextMenuStrip)

    {

        // Get the TreeNode that is displaying this context menu

        treeNodeControl = contextMenuStrip.SourceControl;


        if (toolStripMenuItem.CheckState == CheckState.Checked)

        {

            //Do something with treeNodeControl.SelectedNode treeView node

        }

    }


}


查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信