Программирование КПК и смартфонов на .NET Compact Framework | страница 30
Свойство >Enabled
имеет значение >True
, если виртуальная клавиатура отображается на экране. Значение свойства можно задавать программно, скрывая или отображая клавиатуру.
Если в приложении необходимо использовать элемент >InputPanel
, нужно следить, чтобы он при активации не загородил элементы управления на форме, иначе пользователь просто не сможет ввести данные.
Можно размещать текстовые поля на форме как можно выше, чтобы элемент >InputPanel
не мешал вводить данные. Но помимо этого можно отслеживать состояние виртуальной клавиатуры и при ее отображении передвигать вверх поля для ввода информации. В этом случае чаще всего приходится применять полосы прокрутки. Можно проиллюстрировать такое поведение примером, в котором элемент >InputPanel
будет активироваться, если текстовое поле получит фокус. А когда >TextBox
потеряет фокус, то клавиатура должна исчезнуть. Эта функциональность реализуется кодом, приведенным в листинге 3.23.
>private void txtTest_GotFocus(object sender, EventArgs e) {
> // Когда пользователь выбирает текстовое поле.
> // то автоматически активируем SIP
> inputPanel1.Enabled = true;
>}
>private void txtTest_LostFocus(object sender, EventArgs e) {
> // При потере фокуса сворачиваем SIP
> inputPanel1.Enabled = false;
>}
В этом примере пришлось добавить на форму кнопку, иначе текстовое поле будет автоматически получать фокус при загрузке формы и приложение не будет работать так, как это задумывалось изначально. В данном случае именно кнопка будет получать фокус ввода при загрузке формы. Но для этого надо присвоить свойству кнопки >TabIndex
нулевое значение.
Теперь если стилусом активировать текстовое поле, то автоматически будет отображена виртуальная клавиатура. Если на появившейся клавиатуре нажать клавишу >Tab
или щелкнуть на кнопке с надписью >Просто кнопка
, то панель ввода автоматически свернется.
Элемент >InputPanel
поддерживает событие >EnabledChanged
, которое возникает при активации и деактивации панели ввода С его помощью можно расширить функциональность примера. Следует добавить еще одно текстовое поле в нижнюю часть формы. Сейчас нужно отследить событие >EnabledChanged
и отреагировать на него должным образом. При активации панели ввода текстовое поле должно сдвинуться вверх, чтобы пользователь мог ввести свои данные. Пример обработки этого события приведен в листинге 3.24.
>private void inputPanel1_EnabledChanged(object sender,EventArgs e) {
> // Отслеживаем состояние панели ввода