LoginSignup
0
0

WinFormsでTreeNodeダブルクリック時の子ノードの展開、折りたたみを制御する

Posted at

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を通り、ノードの展開、折りたたみはなくなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0