【问题标题】:Prevent custom control event from firing防止自定义控件事件触发
【发布时间】:2012-08-22 06:25:10
【问题描述】:

我有一个继承自TreeView 的自定义控件。在这个CustomTreeView 中,我处理OnNodeMouseClick 事件以在更改node.Checked 状态之前执行一些过程,就像用户期望的那样:

public class CustomTreeView : TreeView {
    // Constructor...

    protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) {
       base.OnNodeMouseClick(e);

       // Do something...

       e.Node.Checked = !e.Node.Checked;
    }
}

我的问题是,当开发人员订阅CustomTreeView 上的AfterCheck 事件时,e.Action 的值始终为TreeViewAction.Unknown(因为在代码中更改了节点的选中状态),而开发者正在等待TreeViewAction.ByMouse

public partial class Form1: Form {
    private void customTreeView1_AfterCheck(object sender, TreeViewEventArgs e) {
        // e.Action == TreeViewAction.Unknown
        // [developer] The user clicked on the node, it should be 
        //             TreeViewAction.ByMouse!?
    }
}

我想做的是禁用AfterCheck 事件触发并在我的CustomTreeView 类中自己调用它,这样我就可以传递TreeViewAction 等于ByMouse 的参数。类似的东西:

public class CustomTreeView : TreeView {
    // Constructor...

    protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) {
       base.OnNodeMouseClick(e);

       // Do something...

       // Prevent all AfterCheck events from firing, just for a moment
       // ??

       e.Node.Checked = !e.Node.Checked;

       // Allow AfterCheck events to fire
       // ??

       // Call myself the AfterCheck event
       base.OnAfterCheck(new TreeViewEventArgs(e.Node, TreeViewAction.ByMouse));
    }
}

这可能吗?

【问题讨论】:

    标签: c# winforms events treeview controls


    【解决方案1】:

    当然,只需在 CustomTreeView 中覆盖 OnAfterCheck,它就会按您的意愿工作。

    public class CustomTreeView : TreeView {
    
        protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) {
           base.OnNodeMouseClick(e);
    
           // your stuff
    
           // Call myself the AfterCheck event
           base.OnAfterCheck(new TreeViewEventArgs(e.Node, TreeViewAction.ByMouse));
        }
    
        protected override void OnAfterCheck(TreeViewEventArgs e)
        {
           // do nothing   
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2011-11-12
      • 2010-10-27
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多