から継承するカスタムコントロールがあり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));
}
}
これは可能ですか?