Элемент InputPanel
Элемент управления InputPanel
позволяет вводить текстовую информацию при помощи виртуальной клавиатуры или панели распознавания знаков SIP (Soft Input Panel). Так как в полной версии .NET Framework данного элемента нет, то стоит рассмотреть его несколько подробнее.
Как правило, в карманных компьютерах нет клавиатуры, поэтому для ввода данных используется виртуальная клавиатура. В обычном состоянии она неактивна и находится в свернутом состоянии. Чтобы ее активировать, нужно щелкнуть стилусом по значку клавиатуры в нижнем правом углу экрана, где располагается меню или панель инструментов ToolBar
. Тогда виртуальная клавиатура появится на экране, и пользователь сможет вводить текст.
Разработчик может программно управлять состоянием клавиатуры. Например, с помощью элемента InputPanel
можно узнать текущее состояние SIP, возможность ее отображения и деактивации. Свойств и методов у элемента InputPanel
не так уж много, но наиболее часто используемые члены класса приведены в следующем списке.
□ Bounds
— прямоугольник, определяющий размеры и позицию SIP.
□ VisibleDesktop
— прямоугольная часть экрана, на которой не отображается SIP.
□ Enabled
— возможность работы с SIP.
□ EnabledChanged
— событие, возникающее при изменении состояния SIP.
Свойства Bounds
и VisibleDesktop
доступны только для чтения и определяют прямоугольники, по которым можно судить о положении SIP и размерах клиентской области, не занятой SIP. Свойство VisibleDesktop
определяет прямоугольник, которым ограничена область экрана, не закрытая SIP. Когда виртуальная клавиатура отображается, то условный прямоугольник поднимается от полоски навигации над окном SIP. Когда SIP скрыт, то прямоугольник занимает все пространство экрана.
Свойство Bounds
описывает размеры и позицию виртуальной клавиатуры, когда она отображается на экране. Причем размеры этого прямоугольника не меняются, даже если виртуальная клавиатура скрыта.
Свойство 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) {
// Отслеживаем состояние панели ввода
// Свойство Bounds возвращает размеры и позицию SIP
if (inputPanel1.Enabled == true)
this.txtJump.Top = 200 — inputPanel1.Bounds.Height;
else
this.txtJump.Top = 200;
}
На рис. 3.15 показан внешний вид окна тестового приложения.
Рис. 3.15. Пример работы с элементом InputPanel
В этом примере позиция текстового поля была подобрана опытным путем, но в реальных проектах разработчик может программно вычислить высоту формы, панели ввода, текстового поля и других элементов формы, чтобы более точно определить позицию сдвига.
Элемент управления DataGrid
Элемент управления DataGrid
позволяет отображать данные в виде таблицы, как это сделано в электронной таблице MS Excel. Как и многие другие элементы управления, он имеет обрезанные возможности по сравнению с полной версией .NET Framework. Например, отключена поддержка свойства DataMember
.
Элемент управления DataGrid
может быть связан с источниками данных при помощи свойства DataSource
. Рассмотрим простейший пример работы с данным элементом. Прежде всего, потребуется создать XML-файл, содержащий некоторые данные. Для примера был использован файл artists.xml
, в котором содержится информация о некоторых известных