我正在使用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;
}
}
这将不允许对函数进行“递归”调用.