Originariamente inviato da alka
Quello che mi appare strano è il modo in cui ottieni il riferimento al nodo
TTreeNode.
Come mai usi il metodo
GetNode?
Utilizzo il treeview per rappresentare un xml.
ogni TreeNode punta tramite la proprietà Data ad un 'estensione' della interfaccia IxmlDomElement. Questa estensione ha la proprietà itemId che contiene l'identificativo del TreeNode: in questo modo posso accedere ad ogni elemento dell'xml tramite la proprietà Data, e accedere ad ogni nodo del treeview tramite l'itemId(utile quando si scatena un evento su un elemento).
Conosci qualcosa di più efficace?
Edit:Ho trovato l'errore anche se non capisco bene il perchè: Ti posto un esempio:
Aggiungere ad una nuova application 1 treeview e 2 Tbutton.
codice:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TObj=class(TObject)
obj:Tobject;
itemId:string;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
a:TTreeNode;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
obj1,obj2,obj3:TObj;
begin
obj1:=Tobj.Create();
obj1.obj:=TObject.Create();
a:=treeView1.Items.AddChildObject(nil,'A',obj1);
obj1.itemId:=String(a.ItemId);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
self.TreeView1.Items.Delete(a);
end;
end.
Quando sul click button2 avviene l'errore da me descritto.
Ciò non avviene se ItemId della classe Tobj lo dichiaro di tipo HTREEITEM.
Capisco che è un errore di cast(anche se tramite Tobj.itemId riesco a recuperare tranquillamente il nodo), ma non capisco perchè si verifica sulla cancellazione del nodo.
Comunque grazie mille!!!