C#winforms TreeView有时会选择错误的项

时间:2016-05-26 07:49:49

标签: c# treeview

我有使用TreeView的winforms项目。有时当我选择一些项目时,其他项目被选中。我非常确定没有任何代码可以覆盖选择。

https://www.dropbox.com/s/qutmu0tmrkjspc6/disablederrortreeview.rar?dl=0

这是示例项目。我需要更新树视图,因此有计时器可以定期更新其内容(因此每秒取消选择一次项目)但有时候点击速度很快,它会选择不同的项目,我没有点击。

任何人都知道问题可能是什么?是否有任何解决方法/修复方法可以阻止这种情况?

谢谢

的Jakub

1 个答案:

答案 0 :(得分:1)

两个行动方案:

您可以:在选择发生时禁用Tick事件:

bool selecting = false;

private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    selecting = true;
}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    selecting = false;
    // maybe you want to call the Tick now: 
    // timer1_Tick(null, null);
}

private void timer1_Tick(object sender, EventArgs e)
{
    if (selecting) return;
    // do your stuff
    ..
}

或者,您可以在Tick正在运行时禁用选择:

bool ticking = false;
TreeNode clickedNode = null;

private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
    e.Cancel = ticking;
    clickedNode = e.Node;
}


private void timer1_Tick(object sender, EventArgs e)
{
    ticking = true;
    // do your stuff
    ticking = false;
    // try to select the clicked node
    if (clickedNode != null) 
      { treeView1.SelectedNode = clickedNode; clickedNode = null;}
}