Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Вниз

помогите начинающему TComboBox.Items 


michael_B   (2002-04-03 19:40) [0]

Как в TComboBox удалить Items, в которых содержится например слово "xxx".
например было:
TComboBox.Items=
"фыва",
"фыxxx",
"asfgh"

нужно
TComboBox.Items=
"фыва",
"asfgh"



Andrus   (2002-04-03 20:30) [1]

for i:=0 to ComboBox1.ItemsCount
begin
if pos("xxx",ComboBox1.Items.Strings[i])>0 then
ComboBox1.Items.Delete(i);
end;



Юрий Зотов   (2002-04-03 21:22) [2]

Так не годится - будет "List index out of bounds".

Надо гнать цикл в обратном порядке:

for i := ComboBox1.Items.Count - 1 to 0 do...



Andrus   (2002-04-03 21:35) [3]

Да не будет никакого "List index out..."
И надо не to a downto :))



Юрий Зотов   (2002-04-03 21:39) [4]

Насчет downto - согласен, невнимательно писал.

А насчет List index - попробуйте сами. На эти грабли уже многие наступали.



Caligula   (2002-04-03 21:42) [5]

Я считаю лучше так:
ComboBox.Items[ComboBox.Items.IndexOf("XXX")]
Вот и всё.



Andrus   (2002-04-03 21:55) [6]

А в каком случае эксепшен произойдет????
А на такие грабли я тоже наступал но все же мне кажется это не тот случай...



DenKop   (2002-04-03 23:32) [7]

to Andrus

for i:=0 to ComboBox1.ItemsCount
begin
if pos("xxx",ComboBox1.Items.Strings[i])>0 then
ComboBox1.Items.Delete(i);
end;


В примере приведённом автором Count=3, т.е. на последнем шаге цикла будет выполняться следующее:
if pos("xxx",ComboBox1.Items.Strings[3])>0 then
ComboBox1.Items.Delete(3);
,а как известно нумерация итемса начинается с нуля, а в данном случае идёт обращение к четвёртому элементу, которого естественно нет по условию. Вот здесь выскочит Exception.



Song   (2002-04-03 23:37) [8]

Да, я полностью согласен с Caligula © (03.04.02 21:42)
Самое простое:
With ComboBox.Items Do Delete[IndexOf("XXX")];
И поместить в исключение на случай, если записи такой не обнаружится.



MBo   (2002-04-04 08:03) [9]

>Caligula & Song
внимательно вопрос прочитайте -
IndexOf("xxx)" не отловит "фыxxx",
и правильно делать так, как указал Ю.Зотов

with ComboBox1 do //Song-у на радость ;)
for i:=Items.Count-1 downto 0 do
if Pos("xxx",Items[i])>0 then
Items.Delete(i);

или так

i:=0;
with ComboBox1 do
while i < Items.Count do
if Pos("xxx",Items[i])>0 then Items.Delete(i)
else inc(i);



Song   (2002-04-04 08:33) [10]

2MBo © (04.04.02 08:03)
Ok, понял. Вопроса, не прочитал, а включился в дискусиию.
Song-у на радость
Кстати здесь можно было With ComboBox1.Items Do... так не нужно писать везде Items :P
:)))



amamed_3071   (2002-04-04 08:34) [11]

i:=Combobox1.Items.IndexOf(S);
While i<>-1 Do
Begin
Combobox1.Items.Delete(i)
i:=Combobox1.Items.IndexOf(S);
end;



MBo   (2002-04-04 09:07) [12]

>Song
я хотел, но увы - Items[i] ;((



Song   (2002-04-04 09:18) [13]

MBo © (04.04.02 09:07) Эххх, чёрт :(((
Кстати, часто от этого страдаю. Придумали бы создатели дельфи какой-нибудь индекс для ссылки на сам объект, указынный в With (например, разновидность self...) With ComboBox1.Items Do ShowMsssage(Self[i].Text); например :))
Дак нет ведь, Self для другого припахали. :((



DL   (2002-04-04 09:36) [14]

2michael_b
Попробуй:
for i:=0 to ComboBox1.Items. Count-1 do
begin
if pos("xxx",ComboBox1.Items[i])>0 then
ComboBox1.Items.Delete(i);
end;



Zemal   (2002-04-04 10:38) [15]

Блин!!! Ну сколько можно разбирать примеры из учебника??? Ребята, лезьте в учебники и не задавайте элементарных вопросов!!! Не отнимайте время, плз!!! Решите сами эту задачу! Размышляйте и думайте!!! А получая готовые решения никогда не уясните основ языка!!! Экспериментируйте, блин! Иначе так и останетесь ламерами! Я сам старался решать такие мелкие проблемы и знаю, что поиск ответа на вотрос заставляет понять и уяснить для себя ответы на десятки побочных вопросов, что ускоряет обучение! Помните из философии "переход количественных изменений в качественные"?! Так вот, если в лом читать книгу по Дельфи (где можно найти кучу подобных примеров), то никогда не стать вам Программистами! Накапливайте опыт, пока не научитесь с лёгкостью мыслить категориями Делфи! Иначе не получится из вас ничего! :) Вот-с...



KSergey   (2002-04-04 13:56) [16]

И после всех разжевываний DL дает неверный ответ... О, люди!




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.035 c
1-46447           Ghost.                2002-04-03 10:41  2002.04.15  
Может это очень просто...


6-46465           Ghostbuster           2002-02-04 07:05  2002.04.15  
Win98 и dos-клент


3-46236           Malder                2002-03-18 20:43  2002.04.15  
Добавление информации к Blob полю


1-46351           MacroDenS             2002-04-04 08:34  2002.04.15  
Please help me


3-46287           gimbat                2002-03-25 22:47  2002.04.15  
D5, MS SQL7