Создание собственного компонента на основе TreeView (проблема TTreeNode) - PullRequest
3 голосов
/ 10 мая 2011

просто нужен доступ к моему пользовательскому TreeView с этим:

MyTreeView1.Selected.MyOwnProperty := 'something';

Итак, все, что я хочу сделать, это создать такой же компонент, как TreeView, но + мне нужно добавить свое собственное свойство ко всем узлам TreeView TreeView.

Если я могу спросить еще раз, может кто-нибудь объяснить мне, как использовать «свойство данных TTreeNodes для указания на объект»? Кто-нибудь может объяснить, как сохранить в нем некоторую информацию (например, имя и возраст) и как получить эту информацию из выбранного TTreeNode?

Ответы [ 3 ]

10 голосов
/ 10 мая 2011

По крайней мере с XE вы можете переопределить создание узлов дерева с помощью TTreeView, используя свойство OnCreateNodeClass для создания пользовательских TTreeNodes.

Например:

type
  TMyTreeNode = class (TTreeNode)
  //
  end;

procedure TMyForm.OnCreate(Sender: TObject);
begin
  MyTreeView.OnCreateNodeClass := OnCreateNodeClass;
end;

procedure TMyForm.OnCreateNodeClass(Sender: TCustomTreeView; 
  var NodeClass: TTreeNodeClass);
begin
  NodeClass := TMyTreeNode;
end;

Затем можно создать подкласс TTreeView, чтобы изменить Selected и вернуть класс узла дерева.

1 голос
/ 10 мая 2011

Я обычно использую свойство data TTreeNodes, чтобы указать на объект, который содержит фактические данные, с которыми я работаю.

Этот подход поощряет отделение вашей модели от графического интерфейса пользователя, что является хорошей идеей.

0 голосов
/ 10 мая 2011

Мэнни, если вы хотите получить доступ к своему пользовательскому свойству во время разработки, вам также необходимо запрограммировать поддержку времени разработки для этого - редактор пользовательских свойств для свойства Items.

...