在VirtualTreeView中跳过/禁用节点

4

我在VirtualStringTree中有5个节点:

tree

节点#4没有标题,当用户按下VK_DOWN或VK_UP时应该跳过它。

当用户单击它时,它也不应该被选中。

我编写了以下代码(可行),用于在使用键盘时跳过该节点:

if Key = VK_DOWN then
begin
  node := VirtualTree.GetNext(VirtualTree.FocusedNode);
  if not Assigned(node) then Exit;

  data := VirtualTree.GetNodeData(node);
  if data^.Caption = '' then
  begin
    VirtualTree.GetNext(node);
    VirtualTree.FocusedNode := node;
    VirtualTree.Selected[node] := true;
  end;
end
else if Key = VK_UP then
begin
  node := VirtualTree.GetPrevious(VirtualTree.FocusedNode);
  if not Assigned(node) then Exit;

  data := VirtualTree.GetNodeData(node);
  if data^.Caption = '' then
  begin
    VirtualTree.GetPrevious(node);
    VirtualTree.FocusedNode := node;
    VirtualTree.Selected[node] := true;
  end;
end;

问题在于通过单击节点仍然会使其聚焦。
我尝试禁用该节点VirtualTree.IsDisabled[node] := true;,但没有成功。
有人知道实现这一目标的方法吗?
1个回答

4

处理 OnFocusChanging 事件,并针对您选择的节点将 Allowed 参数设置为 False。


我不知怎么错过了那个事件。谢谢 :-) - ChrisB
4
不用谢!无论如何,最好处理键盘处理的“OnKeyAction”事件。同时,通过“GetPreviousVisible”和“GetNextVisible”方法查找最近的非空节点。别忘了还有更多的按键需要处理,比如在您的情况下至少要处理“VK_HOME”和“VK_END”(请注意,“OnFocusChanging”也将防止通过键盘聚焦到节点,因此您需要为所有导航键找到最近的可聚焦节点,否则这些键将没有有效作用)。 - TLama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接