【问题标题】:More than one component for IVTEditLink editor in VirtualTreeViewVirtualTreeView 中 IVTEditLink 编辑器的多个组件
【发布时间】:2012-01-07 16:45:55
【问题描述】:

有没有办法将多个组件添加到 VirtualTreeView 的 IVTEditLink 编辑器中?

【问题讨论】:

  • 我不确定您到底在问什么。如果你想编写你的IVTEditLink 编辑器,我不知道TPanel 和两个TEdit 框,那么这是可能的;您唯一应该想到的是为该面板实现IVTEditLink 接口并处理这些编辑框的事件 - 如果您愿意,例如当你OnExit编辑框取消编辑,那么你必须CancelEditNode在那个事件中。
  • 或者如果您问是否可以实现多个IVTEditLink 接口,例如TComboBox 用于一列,TDateTimePicker 用于另一列,然后只需将 OnCreateEditor 中的列大小写并创建您要使用的编辑器;)
  • 感谢您的回复。如果可能的话,我会把你的帖子标记为一个好的答案。

标签: delphi virtualtreeview


【解决方案1】:

我会使用独立表单作为编辑器容器,并为此保留IVTEditLink 概念,因为:

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

但是,如果我没有说服您将 IVTEditLink 概念留给多个列的节点编辑,那么您可以检查 this example 以作为 IVTEditLink 接口的编辑器的表单实现。

【讨论】:

  • 非常好的示例应用程序。谢谢。
【解决方案2】:

只需在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 想要我的 cmets 的第一个案例;由多个组件组成一个编辑器,而不是为不同的列使用不同的编辑器。
  • 那么问题就很不清楚了。 OP 需要编辑他的问题,以更清楚地说明他想要实现的目标。
  • 同意,这就是为什么我在我的 cmets 中要求解释 ;)
猜你喜欢
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2013-01-25
  • 2015-06-27
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多