protected override void OnBeforeCheck(TreeViewCancelEventArgs e)
{
// check suppress flag
if (IsCheckEventSupressed)
{
base.OnBeforeCheck(e);
return;
}
// get current action
bool check = !e.Node.Checked;
// is it allowed to check item ?
if ((CheckboxBehaviorMode == CheckboxBehaviorMode.RecursiveChecked) & (!check) & (e.Node.Parent != null) &&
(e.Node.Parent.Checked))
{
e.Cancel = true;
base.OnBeforeCheck(e);
return;
}
// set supress flag
SupressCheckEvent(true);
// stop drawing tree content
BeginUpdate();
// set cursor
Cursor.Current = Cursors.WaitCursor;
//
try
{
// add or remove path
ExchangePath(((TreeNodePath)e.Node).Path, check);
// handle recursive behaviour
if (CheckboxBehaviorMode == CheckboxBehaviorMode.RecursiveChecked)
{
// remove all childs from folderList_
ExchangeFoldersRec(e.Node as TreeNodePath, false);
// check child nodes to reflect parent check state
CheckNodesRec(e.Node, check);
}
// update marked nodes fonts
MarkNodesRec(e.Node.Parent as TreeNodePath);
}
catch (Exception ex)
{
// ups, exception ?
Console.WriteLine(ex.Message);
}
finally
{
// reset supress flag
SupressCheckEvent(false);
// let the tree redraw his content
EndUpdate();
// reset the cursor
Cursor.Current = Cursors.Default;
}
//
base.OnBeforeCheck(e);
}