【发布时间】:2014-11-02 16:26:03
【问题描述】:
我需要防止节点折叠时发生单击事件。我仍然希望节点折叠并隐藏它下面的所有子节点,但我不希望触发 click 事件或尽可能选择节点。
【问题讨论】:
标签: c# winforms click treeview collapse
我需要防止节点折叠时发生单击事件。我仍然希望节点折叠并隐藏它下面的所有子节点,但我不希望触发 click 事件或尽可能选择节点。
【问题讨论】:
标签: c# winforms click treeview collapse
如果你只需要影响你自己的代码,你可以使用这样的标志:
bool suppressClick = false;
private void treeView1_Click(object sender, EventArgs e)
{
if (suppressClick) return;
// else your regular code..
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.IsExpanded)
{ suppressClick = false; }
else { suppressClick = true; }
}
要获得更多控制权,您可能需要访问 Windows 消息队列..
【讨论】:
我尝试使用前一种解决方案,但它只能以一种方式工作。我实现了一个字典,在其中保持节点展开/折叠状态,所以当我发现状态相同时,它是实际的节点单击,而不是折叠/展开行为。
public class Yourclass {
var nodeStates = new Dictionary<int, bool>();
public void addNode(Yourentity entity)
{
TreeNode node= new TreeNode(entity.Name);
node.Tag = entity;
tree.Nodes.Add(entity);
nodeStates.Add(entity.Id, true /* expanded in this case but doesn't matter */);
}
private void TreeControl_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
var entity = (Yourentity )e.Node.Tag;
bool state = nodeStates[entity.Id];
// If was expanded or collapsed values will be different
if (e.Node.Nodes.Count > 0 && (e.Node.IsExpanded != state))
{
// We update the state
nodeStates[entity.Id] = e.Node.IsExpanded;
return;
}
/* Put here your actual node click code */
}
}
【讨论】: