Текущий архив: 2008.04.27;
Скачать: CL | DM;
Вниз
ComboBox Найти похожие ветки
← →
Alex8 (2008-04-01 12:31) [0]Уважаемые мастера !
Помогите, пожалуйста, разобраться в следующей ситуации.
Выпадающий список компонента ComboBox формируется при
открытии формы в процедуре FormActivate() Посредством
cmb.Item.Add();
Дальше. Если мои действия стандартны (т.е. кликаю
кнопку списка, а затем выбираю одну из его позиций),
то все нормально.
А вот если после раскрытия списка кликнуть в любом
пустом месте формы (вне списка), то взникает исключение
непонятно к чему относящееся.
Текст сообщения следующий:
" 65536 is not a valid value for field "iKod".
The allowed range is -32768 to 32767"
При этом все это происходит только с тем ComboBox"ом,
Список которого формируется в процедуре FormActivate().
Остальные ComboBox этой формы работают нормально.
Кликай где угодно-никаких исключений.
Пробовал остановиться по событию OnClick - не останавливается.
я в полной растеряности. Спасибо
← →
tesseract © (2008-04-01 12:33) [1]
> Список которого формируется в процедуре FormActivate().
Используй FormShow или FormCreate. Activate тебе задолбает.
> " 65536 is not a valid value for field "iKod". The allowed
> range is -32768 to 32767"
Поле Smallint у тебя наверно с адской скоростью заполняеться..
← →
Сергей М. © (2008-04-01 12:35) [2]
> ComboBox формируется при
> открытии формы в процедуре FormActivate()
А теперь подумай головой, что произойдет, если это событие будет возбуждено неоднократно в ходе работы твоего приложения.
← →
Reindeer Moss Eater © (2008-04-01 12:35) [3]65536 это -1 по-русски.
точнее -1 это 65536, которое не влазит в смалинт.
← →
Сергей М. © (2008-04-01 12:38) [4]
> tesseract © (01.04.08 12:33) [1]
> Используй FormShow
При бездумном использовании хрен редьки не слаще будет)
← →
Alex8 (2008-04-01 13:01) [5]> Используй FormShow или FormCreate. Activate тебе задолбает.
FormShow дает тот же результат.
FormCreate, как я и опасался, показал, что список формируется
раньше создания самого ComboBox
> При бездумном использовании хрен редьки не слаще будет
Так, что сделать, если подумать? Не добавлять же кнопку создания
списка.
← →
oldman © (2008-04-01 13:03) [6]
> Выпадающий список компонента ComboBox формируется при
> открытии формы в процедуре FormActivate()
ЗАЧЕМ??????????
← →
{RASkov} © (2008-04-01 13:05) [7]> [5] Alex8 (01.04.08 13:01)
Какие обработчики задействованы у данного комбобокса? Возможно в них ошибка, раз говоришь наполнение проходит нормально и уже при раскрытии и "не правильном" закрытии - ошибка.
← →
Сергей М. © (2008-04-01 13:06) [8]
> FormCreate, как я и опасался, показал, что список формируется
> раньше создания самого ComboBox
Момент формирования списка тебе полностью подконтролен.
> Не добавлять же кнопку создания
> списка
Конечно, не не нужна она.
Такая кнопка уже есть - кнопка открытия выпадающего списка комбобокса, при нажатии на которую возбуждается событие OnDropDown
← →
Reindeer Moss Eater © (2008-04-01 13:08) [9]проблема-то не в событиях, а в том, что в поле смалинт попадает itemindex при уходе с комбо. а это -1.
← →
{RASkov} © (2008-04-01 13:18) [10]> [9] Reindeer Moss Eater © (01.04.08 13:08)
> проблема-то не в событиях, а в том, что в поле смалинт попадает
> itemindex при уходе с комбо. а это -1
В каком поле? :) У Комбобокса полей как таковых нет)
Это понятно что -1 кудато попадает, но где это может попадать? В реализации обработчиков событий комбика)...
← →
tesseract © (2008-04-01 13:21) [11]
> а в том, что в поле смалинт попадает itemindex при уходе
> с комбо. а это -1.
Smallint не понимает -1, может word ? Возможно только если одно значение знаковое (iKOD), а другое не очень. И только если в беззнаковое предварительно попадёт -1, а потом будет приравнено к знаковому
> 65536 это -1 по-русски.
Только для word справедливо.
← →
Reindeer Moss Eater © (2008-04-01 13:22) [12]Я имею ввиду что нет разницы для текущей проблемы в каком обработчике формы он заполняет список.
← →
{RASkov} © (2008-04-01 13:23) [13]> [12] Reindeer Moss Eater © (01.04.08 13:22)
Вот и я о том же :)
Но замечания по тем местам нужно принять автору к свединию)
← →
tesseract © (2008-04-01 13:28) [14]
> Это понятно что -1 кудато попадает, но где это может попадать?
>
-1 Это ItemIdex combobox-а, когда в нём не выбрано значение. Если перезаполнять ComBobox по FormActivate - оно там сбрасываться будет регулярно.
> Я имею ввиду что нет разницы для текущей проблемы
Как видишь есть, но без кода всё равно не вычислишь, где там чего.
← →
Anatoly Podgoretsky © (2008-04-01 13:57) [15]
> Я имею ввиду что нет разницы для текущей проблемы в каком
> обработчике формы он заполняет список.
Есть и OnShow и OnActivate могут вызываться не один раз.
← →
Reindeer Moss Eater © (2008-04-01 14:00) [16]Ну в общем да.
Если при уходе с комбо будет OnActivate, то можно нарваться.
← →
Alex8 (2008-04-01 14:00) [17]> {RASkov} [7]
> Какие обработчики задействованы у данного комбобокса?
У данного комбобокса задействован только onCloseup
>Сергей М. [8]
OnDropDown тоже не помогает. Результат тот же.
Да и отдельная кнопка (проверил на всякий случай)
не решает проблемы.
А рассуждения по поводу ItemIndex=-1 распространяться
на все ComboBox, а у меня остальные работают нормально.
← →
Сергей М. © (2008-04-01 14:03) [18]
> OnDropDown тоже не помогает. Результат тот же.
> Да и отдельная кнопка (проверил на всякий случай)
> не решает проблемы.
Тогда тряси бубен)
Или код выкладывай)
← →
Плохиш © (2008-04-01 14:08) [19]А мой телепатор подсказывает, что ошибка у аФтара в днк.
← →
Reindeer Moss Eater © (2008-04-01 14:18) [20]А рассуждения по поводу ItemIndex=-1 распространяться
на все ComboBox, а у меня остальные работают нормально.
А тип полей которые они редактируют?
← →
Alex8 (2008-04-01 14:46) [21]> А тип полей которые они редактируют?
Short и Alpha (БД- PARADOX)
> Тогда тряси бубен Или код выкладывай
procedure TfrmPoisk.FormActivate(Sender: TObject);
Var r1: String;
i: Word;
begin
frmNm := Trim(TForm(pFrm1).Name);//Фильтрация (только ParentForm)
// Определяем файл поиска
If pFrm1.Name="FrmTiz" Then pTb1 := MDMyBook.Tiz;
If pFrm1.Name="FrmTmt" Then pTb1 := MDMyBook.Tmt;
If pFrm1.Name="frmPsb" Then pTb1 := MDMyBook.TPsb;
// Подготовка
cmbRkv.Clear;
cmbRkv.Text := "";
cmbVal.Clear;
cmbVal.Text := "";
cmbValDop.Visible := False;
cmbValDop.Text:="";
cmbValDop.Clear;
//Формируем Item для cmbRkv >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MDMyBook.TPoisk.Filtered := True;
MDMyBook.TPoisk.Filter := "CFrm =""" + frmNm +"""";
MDMyBook.TPoisk.First;
For i:= 0 to MDMyBook.TPoisk.RecordCount-1 Do
begin
r1 := MDMyBook.TPoisk.FieldByName("Rkv").AsString;
cmbRkv.Items.Add(r1);
MDMyBook.TPoisk.Next;
end;
MDMyBook.TPoisk.Filtered := False; //>>>>>>>>>>>>>>>>>>>>>>>>
end;
← →
tesseract © (2008-04-01 14:51) [22]Вообще неплохо бы onChange ComboBox-а привести, а не это.
← →
Alex8 (2008-04-01 14:57) [23]> Вообще неплохо бы onChange ComboBox-а привести, а не это.
Так onChange ComboBox пустой.
У данного комбобокса задействован только onCloseup
← →
Сергей М. © (2008-04-01 15:07) [24]
> Alex8 (01.04.08 14:46) [21]
Ошибка не в этом коде.
← →
Alex8 (2008-04-01 15:16) [25]> Ошибка не в этом коде.
И самое обидное, что нельзя перейти в пошаговый режим.
По onClick не останавливается. Сразу выдает исключение.
← →
Сергей М. © (2008-04-01 15:27) [26]
> По onClick не останавливается
Еще раз - OnClick какого конкретно объекта ?
← →
Alex8 (2008-04-01 15:31) [27]> Еще раз - OnClick какого конкретно объекта ?
Формы.
Исключение возникает при клике по форме.
← →
Сергей М. © (2008-04-01 15:37) [28]А при старте приложения какой контрол на какой форме у тебя автоматически получает фокус ?
← →
Семеныч (2008-04-01 15:37) [29]> Alex8
> если после раскрытия списка кликнуть в любом
> пустом месте формы (вне списка), то взникает исключение
> У данного комбобокса задействован только onCloseup
> Исключение возникает при клике по форме.
При клике по форме закрывается список комбобокса и возникает этот самый OnCloseUp. Какие отсюда выводы?
← →
Сергей М. © (2008-04-01 15:44) [30]
> Какие отсюда выводы?
А выводы отсюда давным давно озвучены в [3] и [9] : -1, пройдя какие-то несуразные приведения типа к Cardinal и получив при этом значение 65536, тычется в поле iKod, имеющее тип Smallint.
← →
Семеныч (2008-04-01 16:08) [31]> Сергей М. © (01.04.08 15:44) [30]
Отсюда следует и еще один вывод - если при закрытии списка вылезает какая-то ошибка, то неплохо было видеть код обработчика OnCloseUp.
Ошибка-то ведь в нем, скорее всего. Похоже, что именно там пытаются что-то запихнуть в поле iKod, а в комбобоксе в этот момент ничего не выбрано.
← →
{RASkov} © (2008-04-01 16:29) [32]> [17] Alex8 (01.04.08 14:00)
> > {RASkov} [7]
> > Какие обработчики задействованы у данного комбобокса?
>
> У данного комбобокса задействован только onCloseup
Ну вот и покажи его... иначе долго можно гадать...
← →
{RASkov} © (2008-04-01 16:31) [33]> иначе долго можно гадать...
и как не страно, гадают не отвечающие в данной ветке, а вопрошающий :)
← →
tesseract © (2008-04-01 16:36) [34]
> Ошибка-то ведь в нем, скорее всего. Похоже, что именно там
> пытаются что-то запихнуть в поле iKod, а в комбобоксе в
> этот момент ничего не выбрано.
Я это уже вроде как сказал. И сказал чего его сбрасывает.
← →
Семеныч (2008-04-01 16:37) [35]> {RASkov} © (01.04.08 16:31) [33]
Потому что отвечающим уже все ясно...
:о)
← →
Anatoly Podgoretsky © (2008-04-01 17:33) [36]> {RASkov} (01.04.2008 16:29:32) [32]
После такого количество сообщений, не так уж и хочется его видеть.
← →
Alex8 (2008-04-01 17:52) [37]Я тут немного отлучился, а вернувшись с интересом и благодарностью ознакомился с прошедшей беседой. Как будто все прояснилось
Все действительно упирается в OnCloseUp, где у меня предусмотрена
блокировка на ItemIndex=-1, но не блокирован вариант ItemIndex=65536.
Я просто упустил из виду, что при клике по форме список все равно убирается, а потому OnCloseUp. Только когда клик внутри ItemIndex=-1,
а клик снаружи ItemIndex=65536. Значит надо блокировать оба значения.
Правильно? Хороший урок на будущее.
Большое спасибо всем, принявшим участие в обсуждении.
← →
{RASkov} © (2008-04-01 18:13) [38]> Только когда клик внутри ItemIndex=-1,
> а клик снаружи ItemIndex=65536....
> Правильно?
Нет :)
Поставь строку в самое начало OnCloseUp следующую:
ShowMessage(IntToStr(ComboBox.ItemIndex));
И скажи: Хоть раз уидешь 65536?
← →
Alex8 (2008-04-01 19:15) [39]> Хоть раз уидешь 65536?
В рассматриваемом случае ItemIndex=65536. Причем не только
в ComboBox, где возникло исключение, но и в других при клике
снаружи. А есть исключение или нет, это уже зависит от содержания
обработчика OnCloseUp.
← →
Германн © (2008-04-01 19:26) [40]
> Alex8 (01.04.08 19:15) [39]
>
> > Хоть раз уидешь 65536?
>
> В рассматриваемом случае ItemIndex=65536.
Врешь. Сам по себе temIndex не может получить такое значение.
Страницы: 1 2 вся ветка
Текущий архив: 2008.04.27;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.019 c