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

 
Чудеса с TComboBox, Нихрена не пойму
Gedeon
Отправлено: 18.03.2004, 12:36


Ветеран

Группа: Модератор
Сообщений: 1742



В событии
CODE

void __fastcall TfrmMain::cbFindAuthorCloseUp(TObject *Sender)
{
   cbFindAuthor->Text;
}
//---------------------------------------------------------------------------


Свойство текст работает то правильно, то отстает на один выбор, ни в коде, нигде больше ничего не меняю, от свойства AutoDropDown не зависит, я уже заколебался, было такое у кого-нить?
Gedeon
Отправлено: 18.03.2004, 16:03


Ветеран

Группа: Модератор
Сообщений: 1742



Дальше веселее:
CODE

if(cbAddEdition->ItemIndex==-1){
ShowMessage("Нет такого издания");
cbAddYear->Clear();
txtAddNumbers->Text = "";
txtAddNumbers->Enabled = false;
cbAddYear->Enabled = false;
}
else{
cbAddYear->Clear();
QYear->Close();
QYear->SQL->Clear();
QYear->SQL->Add("SELECT PeriodMain.YearPublication FROM PeriodMain");
QYear->SQL->Add("WHERE PeriodMain.Title = " +
IntToStr((int)cbAddEdition->Items->Objects[cbAddEdition->ItemIndex]));
QYear->Open();
while(!QYear->Eof){
cbAddYear->Items->Add(QYear->FieldByName("YearPublication")->AsString);
QYear->Next();
}
QYear->Close();
cbAddYear->Enabled = true;
}

cbAddEdition, cbAddYear- Ткомбобокс
txtAddNumbers — ТЭдит
QYear — ТКьюэри
После даже первого запуска программы ставим курсор в cbAddEdition набираем первые буквы какой-нить ерунды, жмакаем энтер и получаем "Нет такого издания", еще раз жмакаем энтер и все нормально.
Других обработчиков нет. И при работе проги все время оставание на 1 выбранный элемент из списка, назависимо от того выбран существующий или введено что-то левое.

Отредактировано Gedeon — 18/03/2004, 17:07
Gedeon
Отправлено: 18.03.2004, 16:45


Ветеран

Группа: Модератор
Сообщений: 1742



У кого есть время, плиз
Создайте пустой проект, на форму комбобокс, в конструктор формы — это
CODE

   ComboBox1->Items->Add("Sasha");
   ComboBox1->Items->Add("Gedeon");

В обработчик комбобокса ComboBox1CloseUp — это
CODE

ShowMessage(ComboBox1->ItemIndex);

Свойство ComboBox1 AutoDropDown — true
Запустите проект
фокус на комбо, там печатайте букву s и жмакайте энтер, че показывает?
Asher
Отправлено: 18.03.2004, 17:29


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

Группа: Модератор
Сообщений: 550



Привет.
Сделал. Попробовал. Фигня какая-то. отстает на один шаг.
Может надежнее старый добрый OnChange ?

P.S. Сам я сижу пока на 5-ке, поэтому твои проблемы мне неведомы biggrin.gif
P.P.S. Переползаю на VC, поэтому, наверное, твои проблемы и не изведаю. biggrin.gif
P.P.P.S. Я нетрезв, сильно, поэтому, если что, то завтра
Gedeon
Отправлено: 18.03.2004, 17:37


Ветеран

Группа: Модератор
Сообщений: 1742



Спасибо за труд.
Как по асе удалось выяснить
QUOTE
Ну надо тебе сказать что ComboBox устанавливает ItemIndex,Text после закрытия
тоесть после OnCloseUp

Так что бросил нахер дурью маяться, OnChange не подходит, т.к. меняется постоянно если клацать, а мне надо чтобы только после закрытия.
ЗЫ Да здравcтвует RxLib, в ней сделал не так, как хотел сначала, но работает теперь правильно.
Gedeon
Отправлено: 18.03.2004, 17:40


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Asher @ 18/03/2004, 18:31)
P.P.S. Переползаю на VC, поэтому, наверное, твои проблемы и не изведаю. biggrin.gif

Сам частично уже кой чего там делаю, просто ну очень мне не нравится оттуда с БД работать, а сейчас в основном базы так, что пока стою на месте.
QUOTE
P.P.P.S. Я нетрезв, сильно, поэтому, если что, то завтра

С добрым завтра утром biggrin.gif
exp
Отправлено: 19.03.2004, 00:51


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

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



Такие соображения: событие CloseUp возникает до того, как сменился Item (но ТЕКСТ к этому моменту уже сменился), так что как ни крути ты всегда будешь опаздывать...
Если конечно тебе не хочется искать Итем по тексту а потом переводить индекс комбо бокса.
На OnChahge все пахает, потому что смена итема к этому моменту произошла.

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