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

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

Помогите с ListBox


Cerberus ©   (2005-12-03 19:35:00) 

Ну жно в лист боксе найти имя и удалить его пробую этот код, но ни чего не выходит.
for f:=0 to ListBox1.Items.Count-1 do if ListBox1.Items.Strings[f] = user then listbox1.Items.Delete(f);


begin...end   (2005-12-03 20:31:00) [1]

> Cerberus ©   (03.12.05 20:13) [7]

Уфф... Там может быть только одна такая строчка, или их может быть несколько?

> ListBox   (03.12.05 20:26) [8]

if ListBox1.Items.Strings[f] = 'user' then
 ListBox1.Items.Delete(f)
else
 f := f + 1;

иначе, если две строки подряд будут, то не удалит.


ListBox   (2005-12-03 20:26:00) [2]


procedure TForm1.Button1Click(Sender: TObject);
var f:word;
begin
 f:=0;
 while  f<ListBox1.Items.Count do
    begin
      if ListBox1.Items.Strings[f] = 'user' then listbox1.Items.Delete(f);
      f:=f+1;
    end;
end;


Cerberus   (2005-12-03 20:13:00) [3]

Вощем Содержимое ListBox:
Sabaka
Cerberus
Ekzot
и в таком духе

То есть на одну строчку одно слово.
нужо найти к примеру Sabaka и удалить эту строку.
>  что "нифига не выходит".

Тоесть ничего не происходит.


begin...end   (2005-12-03 20:01:00) [4]

> Cerberus ©   (03.12.05 19:46) [3]

Начальное и конечное значение счётчика цикла for вычисляется только один раз (перед его исполнением), а не на каждом проходе. При прямом цикле получаем следующее: нижняя граница -- 0, верхняя граница -- число, на единицу меньшее количества элементов в списке. Если хотя бы один из элементов будет удалён, то реальное количество элементов в списке уменьшится, а верхняя граница останется прежней (она не перевычисляется). А вот при проходе цикла в обратную сторону такого не будет, хотя границы также будут вычислены лишь единожды. Подумайте, почему.

> Antonn ©   (03.12.05 19:51) [4]

>> А что даст прокрутка цикла в обратную сторону?
> догадайся. AV при удалении хоть одной строки, как минимум.

Прокрутка в обратную сторону даст AV? :-)
Да и при прямом проходе будет не AV, а EStringListError.

> Cerberus ©   (03.12.05 19:56) [5]

Ждём код, содержимое ListBox, образец для поиска и симптомы того, что "нифига не выходит".


Cerberus   (2005-12-03 19:56:00) [5]

Нифига не выходит.


Antonn   (2005-12-03 19:51:00) [6]

Cerberus ©   (03.12.05 19:46) [3]
Переменная.

да ну?
:)

> А что даст прокрутка цикла в обратную сторону?

догадайся. AV при удалении хоть одной строки, как минимум.


Cerberus   (2005-12-03 19:46:00) [7]


> что такое user?

Переменная.
> begin...end ©   (03.12.05 19:40) [2]

Маловероятно.
А что даст прокрутка цикла в обратную сторону?


Antonn   (2005-12-03 19:40:00) [8]

что такое user?
регистрозависимость есть.
и нужно
for f:=ListBox1.Items.Count-1 downto 0 do


begin...end   (2005-12-03 19:40:00) [9]

Крутите цикл в обратную сторону (downto). И не совсем понятно, почему не выходите из цикла сразу после удаления. Или возможно, что в списке будет несколько элементов, удовлетворяющих условию?


Наверх

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