![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать ссылку ветки TreeNode на данные в ListBox [D7, XP]
MZG © (2008-02-06 11:07:00)Подскажите пожалуйста, как можно связать конкретную ветку компонента TreeView (TreeNode) с данными компонента ListBox?
MZG (2008-02-06 17:01:00) [1]Разобрался! :)
Большое спасибо всем!
DVM (2008-02-06 16:21:00) [2]
> MZG
ListBox1.Items.Assign(TStrings(TreeView1.Selected.Data));
MZG (2008-02-06 16:09:00) [3]У меня что-то не получается:(
В рамках эксперимента скопировал код.
Ничего не получилось. компилятор указывает на ошибку
ListBox.Items.Assign(TStrings(TreeNode.Data));
У меня так:
var
Node: 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));
В MyString добавлено 4 строки на каждый узел. При попытке выбрать узел появляется ошибка.
Подскажи пожалуйста, что не так делаю.
{RASkov} (2008-02-06 14:28:00) [4]> [11] MZG (06.02.08 14:04)
> Структура дерева и данные стринглистов также сохранены
А как они сохранены? Каким способом(методом, кодом)....
{RASkov} (2008-02-06 14:21:00) [5]> [11] MZG (06.02.08 14:04)
> 1. Если количество стринглистов (или строк) быдет увеличиваться,
> то как правило, нужно отводить память для работы с ними,
> типа New() despore() ???
Никаких New !!! У тебя уже все реализовано в Data т.е. твой TreeNode.Data:=S это почти тоже самое что и TreeNode.Data:=TStringList.Create;
И потом почти работаешь так TreeNode.Data.Add(''); т.е. так TStrings(TreeNode.Data).Add('');
2 - все сам.... и сохранение и загрузку.... я же уже говорил об этом... Нет у тебя никаких дополнительных строк в TreeNode.DAta - там только указатель на них
MZG (2008-02-06 14:04:00) [6]Да-да, само-собой - освобождение памяти обязательно!
{RASkov} ты прям помогаешь думать, благодаря тебе мозги шевелятся!
Спасибо!
И ещё пара вопросов относительно темы.
1. Если количество стринглистов (или строк) быдет увеличиваться, то как правило, нужно отводить память для работы с ними, типа New() despore() ???
2. Предположим, что имеется некая структура дерева treeview и имеется некое количество stringlist-ов. Структура дерева и данные стринглистов также сохранены. После повторного запуска программы у меня все сохранится? Или для этого все же желательно реализовать запись иным способом. Например, в поток?
{RASkov} (2008-02-06 13:58:00) [7]> И при удалении Итема в ТриВью, нужно самим заботится об
> освобождении памяти...
... занимаемой под стринглисты
{RASkov} (2008-02-06 13:57:00) [8]> [8] MZG (06.02.08 13:55)
Ну не сами стринглисты, а строки из них..... У стринглистов есть методы SaveTo(LoadFrom)File(),...
...так, на всякий случай :)
И при удалении Итема в ТриВью, нужно самим заботится об освобождении памяти...
MZG (2008-02-06 13:55:00) [9]Выходит, что для дальнейшей визуализации, необходимо сохранять стринлисты?
{RASkov} (2008-02-06 13:53:00) [10]> [6] MZG (06.02.08 13:50)
Ну в принципе верно... тыж в каждом итеме тривью хочешь дополнительную инфу, так ведь? Вот эта инфа будет в стринглистах... для каждого итема свой стринглист со своими строками....
MZG (2008-02-06 13:50:00) [11]т.е. нужно необходимое количество стринглистов (заранее определенное), для каждого указателя? Я правильно понимаю?
{RASkov} (2008-02-06 13:46:00) [12]> [4] MZG (06.02.08 13:38)
В TreeNode.Data будут лежать только ссылки(указатели) на СтрингЛисты, которые автоматом не сохраняются....
А листбокс тут вообще не причем.... он только визуализирует данные... конкретно стринглисты ссылки на которые находятся в TreeNode.Data
MZG (2008-02-06 13:38:00) [13]У меня инет тормозной. Едва скачал. Разобрался, но немного.
Только из поста [3] есть вопрос один.
Если саму структуру TreeView и содержимое списка ListBox сохранить в файл. То реально ли в дальнейшем работать? Я имею в виду, сохраняться ли ссылки дерева и данных?
{RASkov} (2008-02-06 12:07:00) [14]> [0] MZG (06.02.08 11:07)
S:=TStringList.create;
S.Add('New Str');
TreeView.Items.Add(nil 'Item').Data:=S;
Достаем:
ListBox.Items.Assign(TStrings(TreeNode.Data));
Игорь Шевченко (2008-02-06 11:53:00) [15]Я вроде ссылку давал в твоей предыдущей ветке.
Не помогло или не скачалось ?
Смирнов (2008-02-06 11:50:00) [16]TTreeNode.Data типа pointer. Через него и связывай.