VirtualTreeView中IVTEditLink编辑器有多个组件。

3
有没有一种方法可以在VirtualTreeView的IVTEditLink编辑器中添加多个组件?

1
我不确定你在这里具体在问什么。如果你想从TPanel和两个TEdit框中组合你的IVTEditLink编辑器,那是可能的;你唯一需要记住的是为该面板实现IVTEditLink接口并处理这些编辑框的事件 - 如果你想在你OnExit编辑框时取消编辑,那么你必须在该事件中CancelEditNode - TLama
或者如果您想问是否可以实现多个 IVTEditLink 接口,例如一个列使用 TComboBox,另一个列使用 TDateTimePicker,那么只需在 OnCreateEditor 中设置列类型并创建所需的编辑器即可 ;) - TLama
谢谢您的回复。如果可能的话,我会将您的帖子标记为一个好答案。 - Knobik
2个回答

7

我建议使用一个独立的表单作为编辑容器,并保留IVTEditLink概念,因为:

  • 如果您使用例如TPanel作为编辑组件容器,则应考虑选择正确的Parent;具有多个字段的编辑器可能会重叠您虚拟树的范围矩形甚至是整个表单的范围。
  • OnDeactivate事件实现到表单比实现到TPanel组件更容易
  • 您可以完全放弃IVTEditLink概念,因为在这里它失去了意义;IVTEditLink是为特定节点和列编辑器设计的,而不是针对所有节点;当OnEditing事件到达或双击事件等时,您可以简单地打开表单编辑器。

但是,如果我没有说服您将IVTEditLink概念保留用于编辑超过一个列的节点,则可以检查此示例,了解将表单用作IVTEditLink接口的编辑器的实现。


非常好的示例应用程序。谢谢。 - James L.

0

只需在 OnCreateEditor 事件中创建您的自定义编辑器。因为此事件提供了 Column 参数,您可以为不同的列创建不同的编辑器。例如:

procedure TForm1.OnCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; out EditLink: IVTEditLink);
begin
  case Column of
    0: EditLink := TColorEditLink.Create;
    1: EditLink := TFontEditLink.Create;
  //etc..
  end;
end;

OP希望应用我的评论中的第一种情况,将多个组件合成一个编辑器,而不是为不同的列使用不同的编辑器。 - TLama
问题非常不清楚。原帖作者需要编辑他的问题,以使其更清晰地表达他想要实现什么。 - Linas
同意,这就是为什么我在评论中要求解释的原因 ;) - TLama

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