Отписаться от AfterCheck в Custom TreeView - PullRequest
1 голос
/ 28 мая 2019

Я создаю собственный TreeView в C #, унаследованный от обычного Forms.TreeView, и мне нужно установить флажок, чтобы щелкнуть текст узла.Это сделано.Однако вызванное событие AfterCheck отправляет действие EventArgs как неизвестное, а не как мышь.

Чтобы решить эту проблему.Я попытался изменить узел, затем создать новый TreeViewEventArgs с правильным TreeViewAction и запустить AfterCheck.

#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

Однако, это, очевидно, вызывает событие дважды.Один раз с неизвестным действием, а другой с действием ByMouse.

Различие между типом Action необходимо для другой части кода, а также является причиной того, что событие не должно запускаться дважды.

Спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...