WinFormsにおいて、TreeViewのノードをダブルクリックするとその子ノードが展開したり、折りたたみしてしまうので、メモ程度にその制御方法を記述する。
private void TreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
private void TreeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
主に、この二つのイベントを使用する。BeforeExpandはノードが子ノードを展開しようとする直前で、BeforeCollapseはノードが子ノードを折りたたみしようとする直前で実行されるイベントである。
つまり、このイベントの手前でダブルクリックかどうかを判断し、boolなどにダブルクリックをしたときのフラグを入れてやればよい。そこで、ノードが展開される直前、さらにその前に実行されるイベントの、TreeView_MouseDownを使用する。
private bool isDoubleClick = false;
private DateTime lastClickTime = DateTime.Now;
if(e.Button == MouseButtons.Left && (DateTime.Now - lastClickTime).TotalMilliseconds < SystemInformation.DoubleClickTime)
{
isDoubleClick = true;
}
else
{
lastClickTime = DateTime.Now;
}
このコードをTreeView_MouseDownに入れてあげることで、ダブルクリックかを判断できる。ダブルクリックの1回目のクリックでelseに入り1回目のクリックを保持したのち、二回目のクリックで今の時間と前回のクリック時間を比較し、それがダブルクリック以内かを判定することでisDoubleClickというbool値にtrueを入れると、ダブルクリックをしたという処理は完了。
この次に入るBeforeExpandと、BeforeCollapseでこのようなコードを入れてあげればよい。
if (isDoubleClick)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
isDoubleClick = false;
これで、ダブルクリック判定されたときだけe.Cancel = trueを通り、ノードの展開、折りたたみはなくなる。