C# 在自定义树视图中从AfterCheck取消订阅

C# 在自定义树视图中从AfterCheck取消订阅,c#,treeview,C#,Treeview,我正在用C#创建一个从常规Forms.TreeView继承的自定义树视图,我需要在单击节点文本时更改该复选框。就这样了。但是,触发的AfterCheck事件将其EventArgs操作作为未知而不是通过鼠标发送 解决这个问题。我尝试更改节点,然后使用正确的TreeView创建一个新的TreeView目标,并在检查后启动 #region Override OnNodeMouseClick /// <summary> Allows the node to change wh

我正在用C#创建一个从常规Forms.TreeView继承的自定义树视图,我需要在单击节点文本时更改该复选框。就这样了。但是,触发的AfterCheck事件将其EventArgs操作作为未知而不是通过鼠标发送

解决这个问题。我尝试更改节点,然后使用正确的TreeView创建一个新的TreeView目标,并在检查后启动

#region Override OnNodeMouseClick
        /// <summary> Allows the node to change when it's name is clicked </summary>
        /// <param name="e"></param>
        protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
        {
            base.OnNodeMouseClick(e);

            #region Get in which pixel the name begins
            TreeNode node = e.Node; //Stores the node
            int i = 0;              //Counter of how many parent nodes the node has

            #region Counts how many parent nodes the clicked node has
            while(node.Parent != null)
            { node = node.Parent; i++; }
            #endregion

            int margin = 40 + 20 * i; //Defines the pixel on which the name in the node starts
            #endregion

            if (e.X >= margin)
            {
                e.Node.Checked = !e.Node.Checked; //Changes th
                MouseClickEventArgs = new TreeViewEventArgs(e.Node, TreeViewAction.ByMouse);

                OnAfterCheck(MouseClickEventArgs);
            }
        }
        #endregion
#节点上的区域覆盖删除单击
///允许节点在单击其名称时进行更改
/// 
受保护的覆盖无效OnNodeMouseClick(TreeNodeMouseClickEventArgs e)
{
base.OnNodeMouseClick(e);
#区域获取名称从哪个像素开始
TreeNode node=e.node;//存储节点
int i=0;//节点有多少父节点的计数器
#区域统计单击节点的父节点数
while(node.Parent!=null)
{node=node.Parent;i++;}
#端区
int margin=40+20*i;//定义节点中名称开始的像素
#端区
如果(e.X>=保证金)
{
e、 Node.Checked=!e.Node.Checked;//更改
MouseClickEventArgs=newtreeviewventargs(e.Node,treevaction.ByMouse);
OnAfterCheck(鼠标单击文塔);
}
}
#端区
但是,这显然会导致事件触发两次。一次使用未知操作,另一次使用ByMouse操作

代码的另一部分需要区分动作类型,这也是事件不应触发两次的原因

谢谢你的帮助