C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как сделать проверку вводимой строки в ComboBox?, Все строки должны быть неповторяющимися
Finder
Отправлено: 21.04.2005, 16:24


Не зарегистрирован







Подскажите пожалуйста, как сделать проверку вводимой
строки ComboBox1->Text на уникальность,
т.е. если уже такая строка есть , то эта новая вводимая строка не добавляется в Items.
FataLL
Отправлено: 22.04.2005, 01:03


Дежурный стрелочник

Группа: Участник
Сообщений: 37



CODE

if( ComboBox1->ItemIndex == -1 )
{
// добавляем
}
else
{
// уже есть
}


Отредактировано FataLL — 22/04/2005, 01:03
Sl@Sh
Отправлено: 22.04.2005, 08:28


Мастер участка

Группа: Участник
Сообщений: 383



Чтобы был эффект, "немного" переделаем :

CODE

if (ComboBox1->Items->Count > 0)
{
  AnsiString testStr = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
  bool FoundDub = false;

  for (short i = 0; i < ComboBox1->Items->Count; i++)
  {
       if (testStr == ComboBox1->Items->Strings[i])
      {
          FoundDub = true;
          break;
      }
  }

  if (FoundDub == false) ComboBox1->Items->Add(testStr);
}


P.S.:to FataLL Читайте вопрос внимательно. smile.gif
Finder_adventures
Отправлено: 22.04.2005, 10:05


Ученик-кочегар

Группа: Участник
Сообщений: 16



Sl@Sh , пасиба!!!
FataLL
Отправлено: 22.04.2005, 13:40


Дежурный стрелочник

Группа: Участник
Сообщений: 37



2 Sl@Sh
Парниша, прежде, чем делать критические замечания другим, опробуй предлагаемый код, почитай хэлп. В конце-концов, если все это в ломы делать, можно написать типа "моё мнение такое". Докладываю тебе: при вводе данных ItemIndex АВТОМАТИЧЕСКИ присваивается значение из списка при совпадении ComboBox1->Text с одним из Items (иначе твой бредовый код на строке 3 вообще бы не сработал). Мог бы хоть не позориться с циклом. Поиск строки в TStrings ищется через IndexOf cool.gif Так что думай, паря, в следующий раз, не обижай людей sad.gif
62316e
Отправлено: 22.04.2005, 13:44


Дежурный стрелочник

Группа: Участник
Сообщений: 38



упрощьоный кусок Sl@Sh
CODE
if (ComboBox1->Items->Count > 0)
{
 if (ComboBox1->Items->IndexOf(ComboBox1->Text) == -1) ComboBox1->Items->Add(ComboBox1->Text);
}
FataLL
Отправлено: 22.04.2005, 13:49


Дежурный стрелочник

Группа: Участник
Сообщений: 37



to 62316e
Можно даже еще проще:
CODE

if( ComboBox1->ItemIndex == -1 )
{
   ComboBox1->Items->Add( ComboBox1->Text );
}
62316e
Отправлено: 22.04.2005, 13:59


Дежурный стрелочник

Группа: Участник
Сообщений: 38



2: FataLL
CODE
if (ComboBox1->ItemIndex==-1) ComboBox1->Items->Add(ComboBox1->Text);
Sl@Sh
Отправлено: 22.04.2005, 16:19


Мастер участка

Группа: Участник
Сообщений: 383



QUOTE (FataLL @ 22/04/2005, 13:40)
Так что думай, паря, в следующий раз, не обижай людей sad.gif

А вы IndexOf написали в своём примере ?
Если забыли, то вопрос кому думать надо. Или вы всё это время хелп читали smile.gif

А вообще если сравнить мой ответ и ваш, то тут вопрос кто кого обижает. В отличие от вас, 62316e просто привёл упрощеный код.

Отредактировано Sl@Sh — 22/04/2005, 16:21
** Finder_adventures
  Отправлено: 23.04.2005, 10:59


Не зарегистрирован







Спасибо и вам FataLL и 62316e !!
** Finder_adventures
Отправлено: 23.04.2005, 18:19


Не зарегистрирован







Ответ FataLL и 62316e справедлив если установлено свойство Sorted=true

а ответ Sl@Sh — при Sorted=false !

Вернуться в Вопросы программирования в C++Builder