1
我有一個繼承自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;
}
}
我的問題是,當開發商簽約的AfterCheck
事件上CustomTreeView
,值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));
}
}
這可能嗎?