Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

запись в Subitem TListView [D7]


3asys ©   (2011-11-26 15:21:00) 

Добрый день!
Есть TListView в котором создано несколько Columns
В цикле ищу нужную строчку (Item) и пытаюсь вставить в определенный столбец этой строчки информацию (текст или картинку)
Делаю это так:
   
For i:=0 to Form1.Items.Count-1 do
   begin
     If Form1.Items.Item[i].Caption = Edit1.Text then
     begin
       // Form1.Items.Item[i].SubItems.Add('');
       Form1.Items.Item[i].SubItemImages[2]:=3; // 3 - номер картинки в TImageList
     end;
    end;

В результате появляется ошибка "List index out of bounds (2)"
Если раскомментировать закоментированную строку, то ошибка не возникает, но и добавления не происходит.
Подскажите, если не трудно, что я делаю не так?


Dennis I. Komarov   (2011-11-28 09:57:00) [1]


> Говоря о столбцах я имел в виду, что если открыть ColumnEditor,
>  то в редакторе свойств можно увидеть в заголовке обозначение
> вида: ListView1.Columns[1] TListColumn

Не суть. Важно что их там нет...


3asys   (2011-11-27 22:35:00) [2]

> Dennis I. Komarov ©
Говоря о столбцах я имел в виду, что если открыть ColumnEditor, то в редакторе свойств можно увидеть в заголовке обозначение вида: ListView1.Columns[1] TListColumn


Dennis I. Komarov   (2011-11-27 22:27:00) [3]


> Есть TListView с N строками (Item) и M столбцами (Column)
> все ячейки которого заполнены.

Нету, есть экземпляр TListView с N item-ами и у каждого есть свойство SubItems: TStrings


3asys   (2011-11-27 12:47:00) [4]

> Германн ©  
> _Юрий

Спасибо Большое!


_Юрий   (2011-11-27 11:41:00) [5]

Полный вариант:

while (ListView1.Items[i].Subitems.Count - 1) < k do
 ListView1.Items[i].Subitems.Add();

ListView1.Items[i].Subitems[k]:='text';


_Юрий   (2011-11-27 11:38:00) [6]


> Буду признателен за конкретный пример вставки например,
> текста в ячейку с адресом TListView.Items[i].Subitems[k].
>


ListView1.Items[i].Subitems[k]:='text';


Германн   (2011-11-27 11:35:00) [7]

Берем к примеру самую верхнюю "строку" ListView. В ней первый (крайний левый) столбец это ListView.Items[0]. Второй столбец это ListView.Items[0].SubItems[0]. Третий - ListView.Items[0].SubItems[1]. И т.д.


3asys   (2011-11-27 11:12:00) [8]

Есть TListView с N строками (Item) и M столбцами (Column) все ячейки которого заполнены. Как заменить значение в ячейке где-нибудь во 2 строке и 3 столбце?
Буду признателен за конкретный пример вставки например, текста в ячейку с адресом TListView.Items[i].Subitems[k].


Пупкин   (2011-11-27 01:53:00) [9]

Это свойство строкового типа. Сабитемс - это tstrings, работайте с ним как с tstrings


3asys   (2011-11-27 01:00:00) [10]

т.е. как в строку TListView.Items[3].Subitems[7] записать значение )текст или картинку?


3asys   (2011-11-27 00:59:00) [11]

>Германн ©
А как адресоваться к произвольной колонке произвольной строки TListView.Items[1].Subitems[0]
?


Германн   (2011-11-27 00:33:00) [12]


> Согласен, но проблема состоит в том, что я не могу сообразить,
>  как обратиться по сути к произвольной ячейке (на пересечении
> столбца Х и строки i ) слева от которой может быть пустая
> ячейка  в которую еще ничего не записывалось.
>

Возможно причина в неверном понимании сути "колонок" в TListView в режиме vsReport.
Первая колонка это TListView.Items
Вторая и последующие колонки это TListView.Items[].Subitems.
Таким образом вторая колонка в TListView это TListView.Items[].Subitems[0]


3asys   (2011-11-26 23:17:00) [13]

Прошу прощения, пропустил ListViev, когда адаптировал код для форума :(
Правильно так:

For i:=0 to Form1.ListViev.Items.Count-1 do
  begin
    If Form1.ListViev.Items.Item[i].Caption = Edit1.Text then
    begin
      // Form1.ListViev.Items.Item[i].SubItems.Add('');
      Form1.ListViev.Items.Item[i].SubItemImages[2]:=3; // 3 - номер картинки в TImageList
    end;
   end;


> MBo ©
Согласен, но проблема состоит в том, что я не могу сообразить, как обратиться по сути к произвольной ячейке (на пересечении столбца Х и строки i ) слева от которой может быть пустая ячейка  в которую еще ничего не записывалось.


_Юрий   (2011-11-26 21:19:00) [14]


> KilkennyCat ©   (26.11.11 18:24) [4]


Имена чрезвычайно важны.
Берем хорошую программу, заменяем имена на бредовые
Получаем г.


KilkennyCat   (2011-11-26 18:24:00) [15]

далось вам имя. это не символьный язык искры, где имена и количество переменных предопределены. можно и листвью формой обозвать.


нонамэ   (2011-11-26 17:45:00) [16]


For i:=0 to Form1.Items.Count-1 do // что за Form1? откуда у него Items?
   begin
     If Form1.Items.Item[i].Caption = Edit1.Text then // Какого типа Form1.Item.Items ?
     begin
       // Form1.Items.Item[i].SubItems.Add('');
       Form1.Items.Item[i].SubItemImages[2]:=3; // 3 - номер картинки в TImageList
     end;
    end;


я тут набредил, найди ашипку мастер


Laguna   (2011-11-26 17:43:00) [17]


> For i:=0 to Form1.Items.Count-1 do

Обращение к чему? К форме или к ListView ?


MBo   (2011-11-26 17:42:00) [18]

>"List index out of bounds (2)"
Значит, такого номера колонки в данной строчке еще нет
SubItems.Add добавляет колонку


Наверх

Титульная страница Поиск, карта сайта Написать письмо