По-моєму ви винаходите велосипед. При введенні символів в текст комбобокса, комбобокс сам підставляє в текст найбільш схоже значення з тих, що є в його об'єктах. Якщо у вашому CBox'e занадто багато рядків, то краще розділити їх на підгрупи, і поставити поруч ще один CBox, в якому ви вибираєте групу, і встановлюєте відбір рядків у другому CBox'e. - teanИЧ 24 Жовтня '12 в 8:31
У мене не все так просто: при виборі значення в комбобоксе перераховується DBGrid. Користувач може вибрати (або вводити символи), потім передумати і спробувати інший варіант. Якщо він вводив букви, то може захотіти вибрати зі списку і там повинні бути тільки актуальні значення. Тому я і перераховую комбобокс щоразу після вибору або введення символів. - leklerk 24 Жовтня '12 о 8:40
Чи допускається вільне введення, тобто введення даних яких немає в базі? В цьому випадку, ваш список, що випадає має функції звичайного суфлера, і відповідь в загальному то дали.
Допускається вводити тільки ті дані, які є в базі (це правило цілісності і не суперечливості БД), в цьому випадку подвопроси - наскільки багато значень в випадаючому списку? Якщо багато, то краще їх згрупувати і, як вже запропонували спочатку вибирати групу, а потім вже з вашого списку. Якщо значень не багато - можна вантажити прямо в список, що випадає. Питання, що використовувати TDBLookupComboBox. TDBComboBox або вантажити в звичайний TComboBox - справа релігії, вибору оптимального функціоналу і зручності розробки. Як правило, якщо є вимога використовувати тільки допустимі значення, то властивість Style виставляється в csDropDownList. тим самим, виключаючи можливість користувача ввести щось заборонене, при цьому, введення значення можливий, але автоматично буде здійснюватися пошук по всіх Items за випадковим збігом і підставлятися користувачеві (пропонуватися).
Так що, треба визначитися що використовувати. Я вважаю за краще звичайний TComboBox. Це зручно. У Strings (видима частина Items) вантажимо «людські» назви а ключ (я сподіваюся, у вас в БД є поняття ключів і вони як правило цілочисельні ..) вантажимо або в властивість Tag, але, не завжди зручно, наприклад, якщо в ролі ключа строкове значення або ключ не скалярний (наприклад, кілька значень хочемо зберегти для даного запису), то, робимо структуру (в термінах Pascal - record) і вантажимо в Data є метод - у будь-якого «комбобокса» - AddObject. Як приклад, робочої процедури:
де boxGroup і boxMat - TComboBox. При цьому, ми бачимо, що спочатку вантажаться групи, потім матеріали. на і, при зміні групи:
в LbGroup показується поточна (обрана) група, і вона ж передається як параметр для заповнення списку. функція LoadListMat має параметр за замовчуванням ..
ТС реалізує фільтр даних, можливо по декількох полях, з autocomplete функцією. Дані в items комбобокса - це можливі рядки, відповідні будь-яким значенням або частинам значення для фільтра. Далі введене або вибране значення (в тому числі не до кінця введене) підставляється в фільтр з like'ом. І проблема не в заповненні комбобокса або декількох, а в поведінці комбобокса при очищенні Items - курсор в поле вводу скаче на початок рядка. Якщо в onChange перезаполнять список Items і намагатися вводити "12345", то без ручного переміщення курсора буде "54321". - Yura Ivanov 26 Жовтня '12 о 12:43
stells2, спасибі, але у мене трохи інша історія, як правильно зауважив Yura Ivanov :) - leklerk 27 Жовтня '12 в 5:54