Если вы не установили выбор программно, вы можете отменить выбор в событии BeforeSelect
, если действие не создано пользователем:
private void TreeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (e.Action == TreeViewAction.Unknown)
e.Cancel=true;
}
Если вы измените выделение программно, вы можете использовать простой обходной путь, расширив класс TreeView и установив своего рода «флаг»:
public class MyTreeViwe : TreeView
{
public bool IsSuspendSelection { get; set; }
protected override void OnBeforeSelect(TreeViewCancelEventArgs e)
{
if (IsSuspendSelection)
e.Cancel = true;
else base.OnBeforeSelect(e);
}
}
затем выполните:
var tv = sourceNode.TreeView;
tv.IsSuspendSelection=true;
sourceNode.Remove();
tv.IsSuspendSelection=false;
Вы также можете отписаться, а затем снова подписаться на событие AfterSelect
на sourceNode.TreeView
, но я лично нахожу этот метод подверженным аварии. Нет способа узнать, подписан ли данный делегат на данное событие и сколько раз. Вы можете подписаться на событие несколько раз, и тогда ваш метод делегата AfterSelect
будет запущен более одного раза.