c#-TreeView多次触发BeforeSelect事件

我正在使用Windows Forms TreeView控件.

我将其连接的方式如下(简化):

TreeView treeView = new TreeView();

treeView.BeforeSelect += beforeSelect;

private void beforeSelect(sender, args)
{
     MessageBox.Show("Some msg");

     // more code
}

在某些情况下,对MessageBox.Show的调用将触发另一个引发BeforeSelect事件的事件,该事件将触发另一个事件,以及另一个…

看来此事件是在树视图中按项目引发的(我已经计算了引发该事件的次数).

我在互联网上搜索了更多信息,以了解为什么会发生这种情况.

我发现的一件事是TreeView在获得焦点时将自动选择第一个节点.
但是,这不能解释为什么将事件作为树中树节点项的数目触发.

任何帮助将不胜感激.我正在考虑为此提出一个Microsoft Connect错误,因为这似乎是一种非常怪异的行为,与我认为控件应如何工作不一致.

解决方法:

像下面这样简单地阻止自己就足够了吗?

private bool _inside;

private void beforeSelect( object sender, EventArgs args )
{
    if ( !_inside )
    {
        _inside = true;

        MessageBox.Show("Some msg");

        // more code

        _inside = false;
    }
}

这将不允许对函数进行“递归”调用.

上一篇:C#-MVC4的TreeView


下一篇:c#-绑定到“ IsExpanded”不适用于TreeView中的根节点