有没有一种方法可以在VirtualTreeView的IVTEditLink编辑器中添加多个组件?
我建议使用一个独立的表单作为编辑容器,并保留IVTEditLink
概念,因为:
TPanel
作为编辑组件容器,则应考虑选择正确的Parent
;具有多个字段的编辑器可能会重叠您虚拟树的范围矩形甚至是整个表单的范围。OnDeactivate
事件实现到表单比实现到TPanel
组件更容易IVTEditLink
概念,因为在这里它失去了意义;IVTEditLink
是为特定节点和列编辑器设计的,而不是针对所有节点;当OnEditing
事件到达或双击事件等时,您可以简单地打开表单编辑器。但是,如果我没有说服您将IVTEditLink
概念保留用于编辑超过一个列的节点,则可以检查此示例
,了解将表单用作IVTEditLink
接口的编辑器的实现。
只需在 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;
TPanel
和两个TEdit
框中组合你的IVTEditLink
编辑器,那是可能的;你唯一需要记住的是为该面板实现IVTEditLink
接口并处理这些编辑框的事件 - 如果你想在你OnExit
编辑框时取消编辑,那么你必须在该事件中CancelEditNode
。 - TLamaIVTEditLink
接口,例如一个列使用TComboBox
,另一个列使用TDateTimePicker
,那么只需在OnCreateEditor
中设置列类型并创建所需的编辑器即可 ;) - TLama