我有一个TreeView控件,在有组织的层次结构中显示多个TreeNode。我想阻止用户选择最高级别的节点(这是通过使用BeforeSelect事件实现的)。如果用户选择它们,我还想阻止TreeView突出显示顶级节点,即停止TreeView更改节点的背景颜色并“选择”它。
我使用的TreeView是控件的WinForms版本。
以下是我目前正在尝试使用的源代码:
private void tree_BeforeSelect ( object sender, TreeViewCancelEventArgs e )
{
if ( e.Node.Level == 0 )
{
e.Cancel = true;
}
}
这确实取消选择节点,但仅在不可取的闪存(~200ms)之后才会取消选择。
答案 0 :(得分:9)
此代码阻止在取消之前绘制选择:
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
treeView1.BeginUpdate();
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
treeView1.EndUpdate();
}
答案 1 :(得分:2)
如果通过在BeforeSelect的事件参数中将取消设置为true来取消选择,则不会选择该节点,因此背景颜色不会改变。
答案 2 :(得分:2)
除了现有代码之外,如果使用代码向TreeView上的MouseDown事件添加处理程序并使用它的位置选择节点,则可以设置节点颜色。
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
TreeNode tn = treeView1.GetNodeAt(e.Location);
tn.BackColor = System.Drawing.Color.White;
tn.ForeColor = System.Drawing.Color.Black;
}
还有一个小问题,选择大纲仍然显示在MouseDown上,但它至少会停止蓝色背景并让你更进一步。
HTH
单稳