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


Форумы  :: FAQ FoxPro

Как автоматически раскрыть выпадающий список
Дата: 15.05.05 18:58:28 ОтветитьЦитировать

Вопрос

Каким образом можно автоматически раскрыть выпадающий список в ComboBox

Ответ

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

Для раскрытия выпадающего списка в ComboBox пользователь может воспользоваться одним из следующих способов:

  • Находясь в объекте ComboBox нажать клавишу "Alt" и, не отпуская ее, нажать клавишу "стрелка вниз"
  • Нажать левой клавишей мыши в левом верхнем углу объекта ComboBox
  • Нажать левой клавишей мыши на кнопке со стрелкой в объекте ComboBox
  • Если ComboBox имеет свойство Style = 2 - DropDown List, то нажать левой клавишей мыши в любом месте ComboBox

    Последний вариант нам не подходит, поскольку мы не можем сказать заранее, какие именно настройки будут у ComboBox.

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

    * Событие ComboBox.GotFocus()
    * Находясь в объекте ComboBox нажать клавишу "Alt" и,
    * не отпуская ее, нажать клавишу "стрелка вниз"
    KEYBOARD '{ALT+DNARROW}' PLAIN CLEAR
    * Нажать левой клавишей мыши в левом верхнем углу объекта ComboBox
    MOUSE CLICK AT OBJTOCLIENT(this,1), OBJTOCLIENT(this,2) WINDOW (ThisForm.Name) PIXELS
    * Нажать левой клавишей мыши на кнопке со стрелкой в объекте ComboBox
    MOUSE CLICK AT OBJTOCLIENT(This,1)+SYSMETRIC(6), ;
    OBJTOCLIENT(This,2)+This.Width-SYSMETRIC(5) ;
    WINDOW (ThisForm.Name) PIXELS

    Недостатком "мышиных" способов нажатия является визуальное перемещение указателя мыши без участия пользователя. Впрочем, можно при помощи функций MROW() и MCOL() запомнить текущее положение указателя мыши и после разворачивания выпадающего списка той же командой MOUSE вернуть его на место.

    Общим недостатком всех перечисленных методов является то, что они не срабатывают, если у ComboBox сделана настройка

    ComboBox.Style = 2 - DropDown List

    И Вы переводите фокус в ComboBox, нажав левой клавишей мыши на самом объекте ComboBox.

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

    Таким образом, описанные методы автоматического разворачивания выпадающего списка будут всегда работать, только если фокус переводиться в ComboBox при помощи клавиатуры или программно. При переводе фокуса мышкой - результат зависит от настройки ComboBox.Style.


    Соответственно, чтобы также автоматически закрыть ранее раскрытый список (без выбора элемента списка) необходимо симулировать одно из следующих действий пользователя:

  • При раскрытом выпадающем списке нажать клавишу "Esc"
  • При раскрытом выпадающем списке нажать левой клавишей мыши вне области списка

    * При раскрытом выпадающем списке нажать клавишу "Esc"
    KEYBOARD '{ESC}' PLAIN CLEAR
    * При раскрытом выпадающем списке нажать левой клавишей мыши вне области списка
    * Перемещать по вертикали нельзя, поскольку список может быть открыт вверх
    MOUSE CLICK AT OBJTOCLIENT(this,1), ;
    OBJTOCLIENT(this,2)-SYSMETRIC(12) ;
    WINDOW (ThisForm.Name) PIXELS

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

    Кроме того, на клавишу "Esc" может быть настроено нажатие кнопки со свойством CommandButton.Cancel = .T. Т.е. если список не раскрыт, то симуляция нажатия клавиши "Esc" может привести к непредсказуемым последствиям.

    Ну, а перемещение указателя мыши, тоже может вызвать недоумение пользователя. Впрочем, указатель мыши можно вернуть в исходной состояние, используя функции MROW() и MCOL().
    Ratings: 0 negative/0 positive


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


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

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

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