Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 19:52   #1
bablzz
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 40
По умолчанию TreeView и ListView

Люди, помогите сделать след. вещь)
есть форма с тривью, там у меня будут данные(корень-название страны, подкорень-субьект,и ниже по уровню площадь этого субьекта)
А как сделать, чтобы при выделении корня в ListView выводилось тоже самое, то есть caption получит название страны, а subitems субъект и территория. помогите, пожалуйста, или хоть поверните в сторону вернного пути
заранее спасибо
Изображения
Тип файла: jpg Безымянный.jpg (19.1 Кб, 139 просмотров)
bablzz вне форума Ответить с цитированием
Старый 19.01.2011, 21:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

в TreeView есть обработчик OnChange. В нем анализируй тип Node и очищай и по-новой заполняй ListView
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.01.2011, 21:55   #3
bablzz
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 40
По умолчанию

ну я вот написал такую штуку, но когда клацаю на корень(юез поддерева) вылетает что invalid index
Код:
if (Node=tv1.Items.Item[0]) then begin
  lv1.Items.BeginUpdate;
  with lv1.Items.Add do
  begin
    i:=1;
    Caption:=tv1.Items.Item[0].Text;
    SubItems.Add(tv1.Items.Item[i].Text);
    SubItems.Add(tv1.Items.Item[i+1].Text);
  end;
  lv1.Items.EndUpdate;
  end;
Как сделать то правильно? а то при выборе следующего корня, в ListView вообще ничего не показывает, только предыдущие значения

Последний раз редактировалось Stilet; 22.01.2011 в 13:49.
bablzz вне форума Ответить с цитированием
Старый 19.01.2011, 22:24   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
procedure TForm1.tv1Change(Sender: TObject; Node: TTreeNode);
var xNode: TTreeNode;
begin
  xNode:=Node;
  if xNode.Parent<>nil then xNode:=xNode.Parent;
  if xNode.Parent<>nil then xNode:=xNode.Parent;
  lv1.Items.BeginUpdate;
  lv1.Items.Clear;
  with lv1.Items.Add do begin
    Caption:=xNode.Text;
    SubItems.Add(xNode.Item[0].Text);
    SubItems.Add(xNode.Item[0].Item[0].Text);
  end;
  lv1.Items.EndUpdate;
end;
Будет работать если строго три уровня и на 2-ом и 3-ем только по одной ветви
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.01.2011, 22:43   #5
bablzz
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 40
По умолчанию

че то не хочет работать
вот заполняю корень, хочу его выбрать, выкидывает с ошибкой
List index out of bounds

а нельзя использовать потоки? может с ними как то легче
хотя мне выше пример больше нравится
bablzz вне форума Ответить с цитированием
Старый 19.01.2011, 22:53   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Будет работать если строго три уровня и на 2-ом и 3-ем только по одной ветви
для кого писалось? Если уровня не три - добавь анализ и соответствующие действия
Код:
    Caption:=xNode.Text;
    if xNode.HasChildren then begin 
      SubItems.Add(xNode.Item[0].Text);
      if xNode.Item[0].HasChildren then SubItems.Add(xNode.Item[0].Item[0].Text);
    end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.01.2011 в 22:56.
Аватар вне форума Ответить с цитированием
Старый 20.01.2011, 23:27   #7
bablzz
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 40
По умолчанию

Блин, а как сделать, если например к корню относится несколько подкорней.
ну к примеру
-Страна
-Область
-Площадь
-Область
-Площадь
Как мне все эти области вывести в ListView? ну с площадью и страной
bablzz вне форума Ответить с цитированием
Старый 22.01.2011, 08:22   #8
bablzz
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 40
По умолчанию

проблема решена
bablzz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенос строки в элементах listview,listBox,TreeView feramount Visual C++ 1 20.02.2011 16:07
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04
Access+TreeView+ListView evgenmil БД в Delphi 4 08.08.2009 00:36
Связывание TreeView и ListView совместно с Access evgenmil БД в Delphi 2 11.03.2009 19:36
TreeView и ListView Scorpeon Компоненты Delphi 20 15.11.2007 15:57