TreeView als Ablaufplan selber erstellen
Hi Leute, ich sitze seit gestern an einem Problem, ich möchte gerne einen TreeView als Ablaufplan haben, wo der User selber den Ablauf bestimmen kann. Um jetzt den Tree zu erstellen habe ich folgenden Code erstellt :
Code:
Also, wenn ich auf denn Button Klicke soll er einen neuen Eintrag machen, ist nichts makiert, so soll er diesen Eintrag aus dem Edit-Feld als Hauptknotenpunkt machen. Ist ein Punkt makiert, so soll der Eintrag aus dem Edit-Feld als Unterpunkt in den Tree aufgeführt werden. Das mit den Unterpunkten funktioniert ja auch irgendwie. Nur das mit den Weitere haupteinträgen funktioniert nicht richtig. Was mache ich verkehrt ? Hat jemand eine bessere Lösung als die Komponente TTreeView ?
procedure TConfigurationMain.category_addClick(Sender: TObject);
begin if category_tree_view.Items.Count = 0 then category_tree_view.Items.Add(nil,category_name.Text) else begin if category_tree_view.Selected.EditText then category_tree_view.Items.AddChild(category_tree_view.Selected,category_name.Text) else category_tree_view.Items.Add(nil,category_name.Text); end; category_name.Clear; end; |
Moin Rolf,
statt Add würde ich's mal mit AddChild probieren. |
Wo ? Einen Tree mit einem Zweig kann ich ja einwandfrei erstellen. Ersetze ich jetzt das zweite Add durch einen AddChild, bekomme ich genau in der Zeile eine Fehlermeldung :
Zitat:
-- Test_1 || |- Test_1_1 || |- Test_1_2 | -- Test_2 |
Moin Rolf,
die AccessViolation dürfte daher kommen, dass Du die Eigenschaft Selected benutzt, ohne vorher geprüft zu haben, ob denn überhaupt ein Item Selected ist. Wenn nicht gibt Selected nil zurück, und somit wird beim Zugriff auf Selected.EditText eine Exception ausgelöst. Bei mir sähe das so aus:
Delphi-Quellcode:
procedure TConfigurationMain.category_addClick(Sender: TObject);
begin if category_tree_view.Items.Count = 0 then begin category_tree_view.Items.Add(nil,category_name.Text); end else begin category_tree_view.Items.AddChild(category_tree_view.Selected,category_name.Text); end; category_name.Clear; end; |
Ich danke Dir, so funktioniert es wunderbar. Ich hatte das zwar in meinen unzähligen Versuchen ohne die zweite If-Schleife ausprobiert aber es funktionierte nicht. Ist ja jetzt auch egal. Ich Danke Dir nochmals ganz herzlich hast mir echt weitergeholfen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz