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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2010, 08:35   #1
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию SubItems.Delete

как правельно удалить subitems, форму создаю так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ItemIndex,SubItem: integer;
CName: string; CSize: integer; Index: integer;
begin
if pos(Edit1.text,ListView1.Items.Item[1].SubItems.Text)<>0 then
 begin
 ShowMessage(Edit1.text+' найден');
 ShowMessage('запись '+Edit1.text+' будет удалина');
 begin
  with ListView1.Items do
    begin
      Item[ItemIndex].SubItems.Delete(SubItem);
      ShowMessage('запись '+Edit1.text+' удалина');
 end;
 end;
  end
else
begin
 ShowMessage(Edit1.text+' не найден');
begin
  end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.CulumnAdd('Test Column',100,ListView1);
LVUtils.ItemAdd('Test item',0,-1,ListView1);
ListView1.Items.Item[0].SubItems.add('1');
ListView1.Items.Item[0].SubItems.add('2');
ListView1.Items.Item[0].SubItems.add('3');
ListView1.Items.Item[0].SubItems.add('4');
ListView1.Items.Item[0].SubItems.add('5');
end;
То есть от 1 до 5 должна удалить, смотря какая цифра стоит в edit'e, но ругается и выполнятся до канца не хочет, что я не правельно делаю?
bulldog5293 вне форума Ответить с цитированием
Старый 09.11.2010, 08:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Item[ItemIndex].SubItems.Delete(SubItem);
SubItem - Это что? В метод удаления нужно передавать номер. Номер этот должен начинатся с нуля, и это будет со второй колонки. Первая колонка - Caption, начиная с второй остальные уже подчиняются данным из SubItems.
Цитата:
но ругается и выполнятся до канца не хочет
Я его понимаю. "Канца" - штука страшная, с летательным исходом.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2010, 08:57   #3
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

а как передать номер, ведь текст может стоять произвольным, к примеру 79,664,6548,1233,8561 а в едит ввили 1233

немного подумав, я понял так, что текст который найде в subitems должен передать номер самого subitems в котором он находется, но как такое сделать ума не приложу, Stilet подскажи если не трудно

Последний раз редактировалось Stilet; 09.11.2010 в 10:19.
bulldog5293 вне форума Ответить с цитированием
Старый 09.11.2010, 10:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
i:=Item[ItemIndex].SubItems.IndexOf('Тут текст, который нужно наискать чтоб удалить');
if i<>-1 then Item[ItemIndex].SubItems.Delete(i);
И то это если я правильно тебя понял - найти поле с таким текстом и его удалить
Или
Код:
i:=Item[ItemIndex].SubItems.IndexOf('Тут текст, который нужно наискать чтоб удалить');
if i<>-1 then Item[ItemIndex].SubItems[i]:='';
Это найдет, если найдется и просто затрет, не смещая остальные поля в записи
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2010, 10:38   #5
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Сделал так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
ItemIndex,SubItem: integer;
CName: string; CSize: integer; Index: integer;
i: integer;
begin
if pos(Edit1.text,ListView1.Items.Item[1].SubItems.Text)<>0 then
 begin
 ShowMessage(Edit1.text+' найден');
 ShowMessage('запись '+Edit1.text+' будет удалина');
 begin
  with ListView1.Items do
    begin
  i:=Item[ItemIndex].SubItems.IndexOf('Edit1.text');
if i<>-1 then Item[ItemIndex].SubItems.Delete(i);
      ShowMessage('запись '+Edit1.text+' удалина');

 end;
 end;
  end
else
begin
 ShowMessage(Edit1.text+' не найден');
begin
  end;
  end;
end;
Но не чего не удаляестся, просто нада сделать что бы запись удалилась и на её место встали последующие записи

Последний раз редактировалось bulldog5293; 09.11.2010 в 10:43.
bulldog5293 вне форума Ответить с цитированием
Старый 09.11.2010, 10:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и на её место встали последующие записи
Тогда тебе мой первый вариант.
Насчет не удаляется - проверяй доходит ли до удаления в отладке, может у тебя по условию вообще не должно попадать на удаление.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.11.2010, 11:01   #7
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Спс, работает, сделал так
Код:
begin
  i:=ListView1.Items.Item[1].SubItems.IndexOf(Edit1.text);
if i<>-1 then ListView1.Items.Item[1].SubItems.Delete(i);
      ShowMessage('запись '+Edit1.text+' удалина');
 end;
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ListView SubItems mutabor Компоненты Delphi 0 19.08.2010 14:38
delete[] c++ NiCola999 Общие вопросы C/C++ 4 26.02.2010 22:16
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14