PDA

View Full Version : کار با Tree view



msoleiman
شنبه 29 فروردین 1388, 16:47 عصر
چرا این کد Access Violation میدهد؟


if TreeView1 . Selected.Parent.Selected = true then
ShowMessage('Parent')
else
ShowMessage('Child');

vcldeveloper
شنبه 29 فروردین 1388, 19:39 عصر
چون در شرایطی دارید از Selected و Parent استفاده می کنید که نمی دانید آیا این خصوصیات شی ایی را برمی گردانند یا نه.

اگر در TreeView شما هیچ نودی انتخاب نشده باشه، مقدار Selected = nil هست. اگر هم Selected شما parentایی نداشته باشه، مقدار parent=nil هست، پس کافی نودی در TreeView انتخاب نشده باشه، یا نود انتخاب شده Parent نداشته باشه، تا شما AV بگیرید!

کد صحیح:


if assigned(TreeView1.Selected) then
if assigned(TreeView1.Selected.Parent) then
\\Do something

zahra_no
یک شنبه 18 اردیبهشت 1390, 14:06 عصر
با این کد آدرس نود انتخاب شده را بدست میاریم
treeview1.path
حالا اگه بخوایم آدرس parent اون نود را بدست بیاریم، چی باید بنویسیم؟

چطوری کد بالا رو با این کد ترکیب کنم تا آدرس parant بگیرم؟

SAASTN
دوشنبه 19 اردیبهشت 1390, 00:12 صبح
TreeView که Path نداره! احتمالا منظورتون همون ShellTreeView هست که توی تاپیکای دیگه مطرح کردید. اگر واقعا می خواید که مسیری از تمام نودهای پدر نود انتخاب شده ایجاد کنید می تونید بصورت زیر عمل کنید:
function GetNodePath(const aNode: TTreeNode): string;
begin
if Assigned(aNode) then
begin
if Assigned(aNode.Parent) then
Result := GetNodePath(aNode.Parent) + PathDelim + aNode.Text
else
Result := aNode.Text
end
else
Result := '';
end;

procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
Caption := GetNodePath(Node.Parent);
end;

ولی اگر منظورتون بدست آوردن مسیری هست که فایل انتخاب شده در ShellTreeView در اون قرار داره، می تونید از دستور زیر استفاده کنید:
Caption := ExtractFilePath(ShellTreeView1.Path);