:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как ввести новое значение непосредственно в ComboBox
Дата: 15.05.05 19:35:52 ОтветитьЦитировать

Вопрос

Я ввожу новое значение в ComboBox (или редактирую существующее), но оно не попадает ни в выпадающий список, ни в выбранное значение. Как можно организовать ввод нового значения непосредственно в ComboBox.

Причина

ComboBox - это объект, цель которого выбрать одно из уже существующих значений. Он не предназначен для модификации списка значений, который сам же и отображает.

Как следствие, в нем не предусмотрено никакого автоматического механизма модификации этого списка.

То, что Вы набираете непосредственно в ComboBox предназначено для быстрого поиска нужного значения в выпадающем списке по первым набранным символам. Но вовсе не для модификации этого списка. Если набранного Вами значения нет в списке, то предполагается, что Вы ничего не выбрали. Соответственно, выбранное значение не определено (пустое).

Решение

Тем не менее, все-таки можно обойти это ограничение и организовать автоматическое пополнение списка программными средствами. Идея заключается в следующем:

  • То, что отображается в объекте ComboBox содержиться в свойстве ComboBox.DisplayValue
  • То, что, в конце концов, будет выбрано содержиться в свойстве ComboBox.Value
  • При завершении процесса выбора выполняется событие ComboBox.Valid()

    Следовательно, если в событии ComboBox.Valid() сравнить содержимое ComboBox.DisplayValue и ComboBox.Value, то можно сделать вывод о том, что пользователь ввел значение, которого нет в списке.

    Код будет выгладеть примерно так:

    * Событие ComboBox.Valid()
    IF EMPTY(This.DisplayValue)=.F. AND EMPTY(This.Value)=.T.
    * Пользователь ввел значение, но в списке его нет (ничего не выбрано)
    * Добавляем в источник данных ComboBox новое значение
    ...
    * Обновляем источник данных самого ComboBox, чтобы он отобразил это новое значение
    This.Requery()
    ENDIF

    Как именно добавить в источник данных ComobBox новое значение зависит от типа выбранного Вами источника данных. Для таблицы - это добавить новую запись, для массива - увеличить размерность и вписать в новый элемент новое значение и т.п.

    Недостаток данного метода заключается в том, что невозможно определить, чего именно хотел пользователь: ввести новый элемент списка или изменить ранее существовавший элемент. По умолчанию, предполагаем, что всегда осуществляется ввод нового значения.

    Именно поэтому, пользоваться данным методом следует крайне осторожно, предварительно все очень хорошо продумав. Вы можете увязнуть в постоянных просьбах пользователя удалить случайно введенный новый элемент списка.
    Ratings: 0 negative/0 positive


  • Тема Просмотров Написано Написано
      ComboBox 5466 Владимир Максимов 01.03.05 22:12
      Как автоматически раскрыть выпадающий список 12108 Владимир Максимов 15.05.05 18:58
      Как ввести новое значение непосредственно в ComboBox 10107 Владимир Максимов 15.05.05 19:35
      Не отображается выбранное значение в ComboBox 12416 Владимир Максимов 19.05.05 17:37


    Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

    On-line: 2 (Гостей: 2)

    © 2006 Fox Club 
    Яндекс.Метрика