停止两个控件触发彼此的事件

时间:2010-10-10 20:45:43

标签: c# forms controls

假设我有一个带有2个制表符的TabControl和一个在根位置有2个节点的TreeView。

我希望应用程序以下列方式运行:如果我从树视图中单击Node1,TabControl中的Tab1应该变为活动状态。同样,当我点击Tab2时,我希望Node2被选中。反之亦然。

所以我只是用TreeView_AfterSelect和TabControl_SelectedIndexChanged对它进行编码。

如何避免两个控件之间的“竞争条件”,因为它们会触发彼此的事件?

2 个答案:

答案 0 :(得分:1)

只需检查每个事件,确保您尚未选择要选择的节点/选项卡。这实际上不是“竞争条件”。竞争条件是指无法保证两个事件的顺序。

例如:

private void MyTreeView_AfterSelect (object sender, EventArgs e) {
    if (MyTreeView.SelectedNode == node2 && MyTab.SelectedIndex != 1 ) {
        MyTab.SelectedIndex = 1;
    }
}

答案 1 :(得分:0)

这一切都在UI线程上,不确定您正在谈论的竞争条件。此外,事件不应该关心其他事件。活动无法保证。根据应用程序中没有定义事件体系结构的事件构建应用程序将在下游产生许多噩梦。