Программирование КПК и смартфонов на .NET Compact Framework | страница 30



Свойство >Enabled имеет значение >True, если виртуальная клавиатура отображается на экране. Значение свойства можно задавать программно, скрывая или отображая клавиатуру.

Если в приложении необходимо использовать элемент >InputPanel, нужно следить, чтобы он при активации не загородил элементы управления на форме, иначе пользователь просто не сможет ввести данные.

Можно размещать текстовые поля на форме как можно выше, чтобы элемент >InputPanel не мешал вводить данные. Но помимо этого можно отслеживать состояние виртуальной клавиатуры и при ее отображении передвигать вверх поля для ввода информации. В этом случае чаще всего приходится применять полосы прокрутки. Можно проиллюстрировать такое поведение примером, в котором элемент >InputPanel будет активироваться, если текстовое поле получит фокус. А когда >TextBox потеряет фокус, то клавиатура должна исчезнуть. Эта функциональность реализуется кодом, приведенным в листинге 3.23.

Листинг 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.

Листинг 3.24

>private void inputPanel1_EnabledChanged(object sender,EventArgs e) {

> // Отслеживаем состояние панели ввода