![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите начинающему TComboBox.Items [D6, Win95/98, WinME, NT4, Win2k, WinXP]
michael_B © (2002-04-03 19:40:00)Как в TComboBox удалить Items, в которых содержится например слово "xxx".
например было:
TComboBox.Items=
"фыва",
"фыxxx",
"asfgh"
нужно
TComboBox.Items=
"фыва",
"asfgh"
KSergey (2002-04-04 13:56:00) [1]И после всех разжевываний DL дает неверный ответ... О, люди!
Zemal (2002-04-04 10:38:00) [2]Блин!!! Ну сколько можно разбирать примеры из учебника??? Ребята, лезьте в учебники и не задавайте элементарных вопросов!!! Не отнимайте время, плз!!! Решите сами эту задачу! Размышляйте и думайте!!! А получая готовые решения никогда не уясните основ языка!!! Экспериментируйте, блин! Иначе так и останетесь ламерами! Я сам старался решать такие мелкие проблемы и знаю, что поиск ответа на вотрос заставляет понять и уяснить для себя ответы на десятки побочных вопросов, что ускоряет обучение! Помните из философии "переход количественных изменений в качественные"?! Так вот, если в лом читать книгу по Дельфи (где можно найти кучу подобных примеров), то никогда не стать вам Программистами! Накапливайте опыт, пока не научитесь с лёгкостью мыслить категориями Делфи! Иначе не получится из вас ничего! :) Вот-с...
DL (2002-04-04 09:36:00) [3]2michael_b
Попробуй:
for i:=0 to ComboBox1.Items. Count-1do
begin
if pos("xxx",ComboBox1.Items[i])>0 then
ComboBox1.Items.Delete(i);
end;
Song (2002-04-04 09:18:00) [4]MBo © (04.04.02 09:07) Эххх, чёрт :(((
Кстати, часто от этого страдаю. Придумали бы создатели дельфи какой-нибудь индекс для ссылки на сам объект, указынный в With (например, разновидность self...) With ComboBox1.Items Do ShowMsssage(Self[i].Text); например :))
Дак нет ведь, Self для другого припахали. :((
MBo (2002-04-04 09:07:00) [5]>Song
я хотел, но увы - Items[i] ;((
amamed_3071 (2002-04-04 08:34:00) [6]i:=Combobox1.Items.IndexOf(S);
While i<>-1 Do
Begin
Combobox1.Items.Delete(i)
i:=Combobox1.Items.IndexOf(S);
end;
Song (2002-04-04 08:33:00) [7]2MBo © (04.04.02 08:03)
Ok, понял. Вопроса, не прочитал, а включился в дискусиию.
Song-у на радость
Кстати здесь можно было With ComboBox1.Items Do... так не нужно писать везде Items :P
:)))
MBo (2002-04-04 08:03:00) [8]>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-03 23:37:00) [9]Да, я полностью согласен с Caligula © (03.04.02 21:42)
Самое простое:
With ComboBox.Items Do Delete[IndexOf("XXX")];
И поместить в исключение на случай, если записи такой не обнаружится.
DenKop (2002-04-03 23:32:00) [10]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.
Andrus (2002-04-03 21:55:00) [11]А в каком случае эксепшен произойдет????
А на такие грабли я тоже наступал но все же мне кажется это не тот случай...
Caligula (2002-04-03 21:42:00) [12]Я считаю лучше так:
ComboBox.Items[ComboBox.Items.IndexOf("XXX")]
Вот и всё.
Юрий Зотов (2002-04-03 21:39:00) [13]Насчет downto - согласен, невнимательно писал.
А насчет List index - попробуйте сами. На эти грабли уже многие наступали.
Andrus (2002-04-03 21:35:00) [14]Да не будет никакого "List index out..."
И надо не to a downto :))
Юрий Зотов (2002-04-03 21:22:00) [15]Так не годится - будет "List index out of bounds".
Надо гнать цикл в обратном порядке:
for i := ComboBox1.Items.Count - 1 to 0 do...
Andrus (2002-04-03 20:30:00) [16]for i:=0 to ComboBox1.ItemsCount
begin
if pos("xxx",ComboBox1.Items.Strings[i])>0 then
ComboBox1.Items.Delete(i);
end;