Как да свържете клон на TreeNode към данни в ListBox
Можете ли да ми кажете как да свържа конкретен клон на компонента TreeView (TreeNode) с данните на компонента ListBox?
TTreeNode. Данни от тип указател. Свържете се чрез него.
Някак си дадох връзка в предишната ви тема. Не помогнахте или не изтеглихте?
> [0] MZG (06.02.08 11:07)S:=TStringList.create; S.Add("New Str"); TreeView.Items.Add(nil "Item").Data:=S;
Имам интернет спирачка. Едва свален. Разбрано, но малко.
Има само един въпрос от публикация [3] Ако самата структура на TreeView и съдържанието на списъка ListBox са записани във файл. Реалистично ли е да работите в бъдеще? Искам да кажа дали дървото и връзките към данни продължават?
> [4] MZG (06.02.08 13:38)TreeNode.Data ще съдържа само връзки (указатели) към StringLists, които не се записват автоматично. И списъчната кутия изобщо няма нищо общо с това. той само изобразява данните. по-специално списъците с низове от връзки, към които са в TreeNode.Data
тези. имате ли нужда от необходимия брой списъци с низове (предварително определени) за всеки указател? правилно ли разбирам?
> [6] MZG (02/06/08 13:50)Е, в общи линии правилно. искате допълнителна информация във всеки любопитни факти, нали? Тази информация ще бъде в списъците с низове. за всеки елемент собствен списък с низове със собствени редове.
Оказва се, че за по-нататъшна визуализация е необходимо да запазите списъците с низове?
> [8] MZG (06.02.08 13:55)Е, не самите списъци с низове, а низовете от тях. Списъците с низове имат методи SaveTo(LoadFrom)File(). . така че за всеки случай :) И когато изтривате елемент в TriView, трябва сами да се погрижите да освободите паметта.
> И когато изтривате елемент в TreeView, трябва да се погрижите за > освобождаване на паметта.. заета отсписъци с низове
Да, да, разбира се - освобождаването на паметта е задължително! Вие наистина помагате да мислите, благодарение на вас мозъците се движат! Благодаря ви! И още няколко въпроса по темата.
1. Ако броят на списъците с низове (или низовете) ще се увеличи, тогава като правило трябва да разпределите памет за работа с тях, като New() despore() .
2. Да приемем, че има определена структура на дървовиден изглед и има определен брой списъци с низове. Дървовидната структура и данните от списъка с низове също се запазват. След рестартиране на програмата ще ми се запази ли всичко? Или за това все още е желателно записът да се приложи по различен начин. Например в поток?
> [11] MZG (02/06/08 14:04) > 1. Ако броят на списъци с низове (или низове) ще се увеличи, > тогава, като правило, трябва да разпределите памет за работа с тях, > като New() despore() .Няма ново. Вече имате всичко внедрено в Data, т.е. вашият TreeNode.Data:=S е почти същият като TreeNode.Data:=TStringList.Create; И тогава почти работите като TreeNode.Data.Add(""); тези. така TStrings(TreeNode.Data).Add("");
2 - всичко сам. и запишете и заредете. Вече говорих за това. Нямате допълнителни редове в TreeNode.DAta - има само указател към тях
> [11] MZG (02/06/08 14:04) > Дървовидната структура и данните от списъка с низове също се запазватКак се записват? По какъв начин (метод, код).
Нещо не ми върви :(
Като част от експеримента копирах кода. Нищо не се случи. компилаторът дава грешка ListBox.Items.Assign(TStrings(TreeNode.Data));
var Възел: TTreeNode; MyString: TStringList;
begin MyString:=TStringList.create; MyString.Add("New Str"); TreeView.Items.Add(nil "Item").Data:=MyString; end;
след това щракнете върху избрания възел на дървото. ListBox.Items.Assign(TStrings(Node.Data));
Добавени са 4 низа към MyString на възел. Възниква грешка при опит за избор на възел.
Моля, кажете ми какво правя грешно.
Схванах го! :) Благодаря много на всички!