Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
ВнизВопрос по TTreeView. Найти похожие ветки
← →
Drowsy © (2016-09-06 20:15) [0]SourceIbXTreeView - потомок TTreeView.
// Переносим SourceIbXTreeView из основной формы в форму ввода.
SavedOwner := SourceIbXTreeView.Owner;
SavedOwner.RemoveComponent(SourceIbXTreeView);
F_objred.InsertComponent(SourceIbXTreeView);
SourceIbXTreeView.Parent := F_objred.Panel5;
====>
Вот здесь (при смене парента), вызывается удаление всех нодов.
У обработчик удаления выглядит так :
procedure TIBXTreeView_Pure.DelNode(Sender: TObject; Node: TTreeNode);
Var SpecialData : TItemRec;
begin
if Assigned(Node) then
if Assigned(Node.Data) then
begin
SpecialData:=Node.Data;
SpecialData.Free;
SpecialData:=nil;
Node.Data:=nil;
==> Вот здесь не происходит обнуления Node.Data
end;
end;
2 вопроса:
1) почему при смене парента удаляются ноды?
2) почему не обнуляются Node.Data?
Спасибо.
← →
Drowsy © (2016-09-15 02:04) [1]?
← →
iop © (2016-09-15 10:59) [2]2 вопроса:
1) почему при смене парента удаляются ноды?
2) почему не обнуляются Node.Data?
1. при смене парента никакие ноды не удаляются.
2. потому что у тебя еретический дизайн программы
← →
Drowsy © (2016-09-20 03:37) [3]
> 1. при смене парента никакие ноды не удаляются.
> 2. потому что у тебя еретический дизайн программы
На форме 2 панели и кнопка На первой панели дерево. По кнопке перемещаю дерево на другую панель. При смене парента, вызывается событие удаление нодов.unit UnitTmp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
TreeView1: TTreeView;
Panel2: TPanel;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure TreeView1Deletion(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var TmpTree : TTreeView;
begin
TmpTree := TreeView1;
TreeView1.Owner.RemoveComponent(TreeView1);
Panel2.InsertComponent(TmpTree);
TmpTree.Parent := Panel2; // <- здесь происходит вызов TreeView1Deletion для всех узлов дерева.
end;
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
// OnDeletion – Генерируется при удалении Node дерева для каждого удаляемого Node.
// Параметр “Node” содержит Node, который удаляется.
// Таким образом, с помощью данного события удобно, к примеру,
// перед удалением Node разрушать связанные с ним данные,
// если таковые содержатся в его свойстве Data, и т.д.
end;
end.
← →
iop © (2016-09-20 09:03) [4]при смене парента никакие ноды не удаляются.
← →
iop © (2016-09-20 09:06) [5]TForm1.Button1Click(Sender : TObject);
f : TFotm;
begin
f := TForm2.Create(Application);
TreeView1.Parent := f;
end;
тыцнешь в кнопку сто раз - сто раз тривью сменит парента и не потеряет ни одного нода.
хотя можешь тыцнуть не сто, а тысячу раз.
← →
Drowsy © (2016-09-20 10:04) [6]
> iop © (20.09.16 09:06) [5]
тыкнул сто, потом тысячу.
теперь ты :
создай событие Tree.onDeletion и поставь в нём точку остановки.
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
// OnDeletion – Генерируется при удалении Node дерева для каждого удаляемого Node.
// Параметр “Node” содержит Node, который удаляется.
// Таким образом, с помощью данного события удобно, к примеру,
// перед удалением Node разрушать связанные с ним данные,
// если таковые содержатся в его свойстве Data, и т.д.
end;
← →
iop © (2016-09-20 10:05) [7]еще раз для погромистов:
при смене парента никакие узлы в тривью не удаляются.
← →
Drowsy © (2016-09-20 19:53) [8]
> iop © (20.09.16 10:05) [7]
Если определено событие Tree.onDeletion, то при смене парента, оно вызывается. Согласен?
← →
iop © (2016-09-20 20:57) [9]при смене парента
событие вызывается,
ноды не удаляются.
← →
iop © (2016-09-20 21:11) [10]да и вызывается при смене парента оно не везде.
в ХЕ8 никакого OnDeletion при смене парента не вызывается вообще.
TTVExpandedEvent is used to respond to notifications of events that occur to the nodes of a tree view control. It is a generic event handler for various events that notify the tree view of something that happened to a node.
Sender is the tree-view control that contains the node that is the focus of the notification.
Node is the item that has been expanded, collapsed, deleted, or which is about to be drawn.
т.е. в ранних версиях возможно при любом чихе в дереве вызывались скопом все обработчики типа TTVExpandedEvent вне зависимости от того что там реально произошло.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.11.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.001 c