Программирование КПК и смартфонов на .NET Compact Framework | страница 13
Для создания обычной кнопки используется класс >System.Windows.Forms.Button
. Эта кнопка обладает всеми основными функциями, которые есть у такого же класса в полной версии .NET Framework. Кнопка предназначена для обработки нажатия стилуса на соответствующую область экрана. В этом случае возникает событие >Click
. Код, приведенный в листинге 3.1, является обработчиком этого события. Он выводит текущее время в текстовое поле после нажатия на кнопку с надписью >Узнать время
.
>private void butGetTime_Click(object sender, EventArgs e) {
> txtCurTime.Text = DateTime.Now.ToLongTimeString();
>}
Рисунок 3.3 показывает приложение в момент нажатия на кнопку.
Рис. 3.3. Результат нажатия на кнопку
Текст на кнопке может быть только однострочным. Если он не помещается на кнопке, то будет обрезан. Поэтому нужно быть очень осторожным при выборе текста для кнопки. В следующей главе, посвященной улучшениям элементов управления, приведен пример создания кнопки с многострочным текстом, которая создается при помощи неуправляемого кода с использованием функций Windows API.
Функциональность элемента управления >Button
очень сильно урезана по сравнению с полной версией .NET Framework. В частности, у данного элемента нет свойств >Image
и >ImageList
, которые применяются для отображения на кнопке графики.
Элемент TextBox
В предыдущем примере дата отображалась в текстовом поле. Это поле создается при помощи класса >TextBox
, который позволяет вводить текст. Данный элемент поддерживает такие стандартные свойства, как >BackColor
и >ForeColor
. Событие >Click
элементом >TextBox
не поддерживается, но разработчик может воспользоваться событиями >KeyPress
, >KeyUp
и >KeyDown
. Следует отметить особенность этого элемента. Несмотря на то что класс >TextBox
поддерживает свойство >PasswordChar
, при вводе пароля на экране всегда будет использоваться символ звездочки. Задать другой символ не получится.
Также текстовое поле не поддерживает свойство >CharacterCasing
, позволяющее в автоматическом режиме преобразовывать символы текста в нужный регистр. Впрочем, данный недостаток легко исправить, что иллюстрирует фрагмент кода, приведенный в листинге 3.2.
>private void txtCurTime_KeyPress(object sender, KeyPressEventArgs e) {
> if (Char.IsLetter(e.KeyChar)) {
> // сохраняем текущую позицию каретки
> int pos = txtCurTime.SelectionStart;
> // переводим в верхний регистр
> txtCurTime.Text =
> txtCurTime.Text.Insert(txtCurTime.SelectionStart,