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


Форумы  :: FAQ FoxPro

Как автоматически раскрыть выпадающий список
Дата: 15.05.05 17: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 4998 Владимир Максимов 01.03.05 21:12
      Как автоматически раскрыть выпадающий список 10724 Владимир Максимов 15.05.05 17:58
      Как ввести новое значение непосредственно в ComboBox 9061 Владимир Максимов 15.05.05 18:35
      Не отображается выбранное значение в ComboBox 11161 Владимир Максимов 19.05.05 16:37


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

    On-line: 44 leonid sphinx  and Guests: 42


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