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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2016, 13:38   #1
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию ListView редактирование определенной ячейки

Доброго времени суток!

Допустим мне нужно сначала заполнить столбик показатели, а потом заполнять по 1 полю в столбиках Игрок 1 и Игрок 2 как можно это сделать?
Изображения
Тип файла: png 2016-08-09_133604.png (1.2 Кб, 303 просмотров)
nibufep вне форума Ответить с цитированием
Старый 11.08.2016, 18:25   #2
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Согласна, на удивление плохо документированный компонент...
Тем не менее попробую помочь.
Исходные данные - совершенно пустой компонент ListView1 на форме.
Для начала -
Код:
ListView1.ViewStyle:=vsRepоrt;
Нам нужен именно этот вид.

Поскольку ListView1 должен иметь 3 столбца, надо их создать:
Код:
ListView1.Columns.Add.Caption:='Показатели';
ListView1.Columns.Add.Caption:='Игрок 1';
ListView1.Columns.Add.Caption:='Игрок 2';
//подгоним ширину столбцов
ListView1.Columns[0].Width:=ListView1.Columns[0].Width+30;
ListView1.Columns[1].Width:=ListView1.Columns[1].Width+10;
ListView1.Columns[2].Width:=ListView1.Columns[2].Width+10;
Теперь первое - "мне нужно сначала заполнить столбик "показатели"".
Это делается через СОЗДАНИЕ строк первого столбца:
Код:
ListView1.Items.Add.Caption:='Показатель 1';
ListView1.Items.Add.Caption:='Показатель 2';
ListView1.Items.Add.Caption:='Показатель 3';
Таким образом мы создадим 3 строки в первом столбце.

Далее... "а потом заполнять по 1 полю в столбиках Игрок 1 и Игрок 2"
Это не StringGrid, поэтому сначала надо эти столбцы создать.
Причем создавать столбцы придется в каждой строке!!!
И создать, допустим, третий столбец можно только после создания второго!
Например, создадим 2-й столбец для первой строки:
(индексация и строк, и столбцов ведется, как обычно, с нуля)
Код:
ListView1.Items[0].SubItems.Add('11');
//и 3-й столбец для нее же:
ListView1.Items[0].SubItems.Add('12');
Далее - аналогично для каждой строки:
Код:
ListView1.Items[1].SubItems.Add('21');
ListView1.Items[1].SubItems.Add('22');
ListView1.Items[2].SubItems.Add('31');
ListView1.Items[2].SubItems.Add('32');
После создания обращаться к любому элементу можно и нужно по индексу.
Например, для редактирования первого столбца 2-й строки:
Код:
ListView1.Items[1].Caption:=''ПОКАЗатель 2;
Для редактирования второго столбца этой же строки:
Код:
ListView1.Items[1].Subitems[0]:='5';
И для редактирования третьего столбца этой же строки:
Код:
ListView1.Items[1].Subitems[1]:='3';
Ну, а если сподобитесь обратиться к еще не созданному элементу, получите исключительную ситуацию...

"Вот в таком плане, в таком духе, в таком разрезе..." /А. Райкин/

Последний раз редактировалось kropotkina-alice; 11.08.2016 в 18:37.
kropotkina-alice вне форума Ответить с цитированием
Старый 12.08.2016, 15:14   #3
nibufep
Форумчанин
 
Регистрация: 02.08.2014
Сообщений: 476
По умолчанию

А если я создал 3 столбца

Код:
ListView1.Items.Add.Caption:='Показатель 1';
ListView1.Items.Add.Caption:='Показатель 2';
ListView1.Items.Add.Caption:='Показатель 3';
Почему я сразу не могу изменить определенной столбец?

Код:
ListView1.Items[0].Subitems[0] := 'Данные';
Если вот мне нужно таким образом заполнить таблицу, то как быть? Только заполнять сначала пустыми строками

Код:
ListView1.Items[0].SubItems.Add('');
ListView1.Items[0].SubItems.Add('');
вот так, а потом редактировать? Больше не как?

и то так получается редактировать только первую строку, дальше не хочет...

Последний раз редактировалось Вадим Мошев; 12.08.2016 в 21:33.
nibufep вне форума Ответить с цитированием
Старый 12.08.2016, 16:43   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от nibufep Посмотреть сообщение
А если я создал 3 столбца
...
Почему я сразу не могу изменить определенной столбец?
Увы, произошло именно то, что я и ожидала...
Вы не поняли главного - каждая строка в ListView1 состоит из:
1. Строки, располагающейся в нулевом (первом) столбце;
2. Подчиненных ей строк, дословно - подстрок, которые располагаются в последующих столбцах. Иначе говоря, подстроки и образуют массив столбцов.
Но! И это очень важно!
Каждая СТРОКА может иметь разное количество столбцов (подстрок) или не иметь их вовсе!
Строка - это ListView1.Items[индекс строки].Caption. Строки образуют первый (нулевой столбец).
А ее подстроки (то бишь следующие по порядку столбцы) - ListView1.Items[индекс строки].Subitems[индекс столбца].
Теперь по порядку...
Цитата:
Сообщение от nibufep Посмотреть сообщение
А если я создал 3 столбца
Код:
ListView1.Items.Add.Caption:='Показатель 1';
ListView1.Items.Add.Caption:='Показатель 2';
ListView1.Items.Add.Caption:='Показатель 3';
Вы не СТОЛБЦЫ создали таким кодом, а СТРОКИ первого (то есть нулевого по индексу) СТОЛБЦА!!!
А подстрок у вас еще не существует. Поэтому эта ваша попытка
Код:
ListView1.Items[0].Subitems[0] := 'Данные';
обречена на "эксепшн"...
Цитата:
Сообщение от nibufep Посмотреть сообщение
Если вот мне нужно таким образом заполнить таблицу, то как быть? Только заполнять сначала пустыми строками
Код:
ListView1.Items[0].SubItems.Add('');
ListView1.Items[0].SubItems.Add('');
вот так, а потом редактировать? Больше не как?
и то так получается редактировать только первую строку, дальше не хочет...
Да. Но с одной малюсенькой поправкой - вы просто дико путаете строки со столбцами... Перечитайте сказанное мной еще разок. А вдруг?
Если вы поняли объяснения, которые я привела выше, то сами поймете абсурдность этой вашей попытки редактирования еще не созданных строк...

Кстати, обратите внимание на кнопку "Правка". С ее помощью некоторое время можно править свое сообщение, дополнять и проч.
А если вы будете плодить свои сообщения с интервалом в минуту и менее, то модератор сочтет это за "наколачивание" постов и вставит вам дыню в...
Ну, вы сами знаете куда...

Впечатление такое, что вы куда-то торопитесь... Не торопитесь, читайте внимательнее...

Последний раз редактировалось kropotkina-alice; 12.08.2016 в 18:33.
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить полную информацию из определенной ячейки wwDBGrid Staziah2 БД в Delphi 2 28.08.2015 02:23
Часть формулы = переменное значение определенной ячейки Старый Лыжник Microsoft Office Excel 3 21.01.2015 08:46
Редактирование ячейки и перенос значения ячейки через форму на другой лис Susven Microsoft Office Excel 2 11.06.2013 09:18
Как привязать ячейки к одной определенной ячейке Marmelad Microsoft Office Excel 3 12.09.2012 20:13
копирование из определенной ячейки dbgrid в массив xaero93 БД в Delphi 3 08.12.2009 20:30