Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка ПрИн академия 2013.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
5.56 Mб
Скачать

2. Основные контролы (компоненты) Windows- приложения

2.1. Button

Кнопки создаются на базе класса System.Windows.Forms.Button. В этом классе предусмотрено значительное количество свойств, с помощью которого можно создавать кнопки самого разного вида.

Программист может задавать внешний вид и поведение кнопки, помещать на ее поверхность графические изображения, а также задавать для кнопки фоновое графическое изображение. Шрифт текста, а также расположение текста и графического изображения можно изменять. Расскажем об этом подробнее.

Надпись на кнопке

Как мы уже говорили, текст надписи, расположенной на кнопке, задается с помощью свойства Text. Это свойство, как и другие свойства элементов управления, можно задавать во время проектирования приложения (design time), а также программно во время работы приложения (run time).

Текст

Вот, например, как программа может изменить текст надписи для кнопки buttonRed: buttonRed.Text = "Красный";

Стандартные кнопки ОС Microsoft Windows не допускают изменение шрифта или цвета надписей. Что же касается кнопок System.Windows.Forms.Button, то здесь перед программистом открываются широкие возможности.

Шрифт

Свойство Font задает шрифт надписи. На этапе визуального проектирования приложения можно выбрать этот шрифт из числа шрифтов, установленных в ОС, при помощи стандартного диалогового окна. Программно шрифт задается следующим образом:

buttonYellow.Font = new System.Drawing.Font("Comic Sans MS", 11.25F, Sytem.Drawing.FontStyle.Regular,  System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));

Здесь мы создаем новый шрифт как объект класса System.Drawing.Font, передавая конструктору через параметры такие атрибуты шрифта, как название, размер, стиль, единицы измерения размера шрифта и кодировку.

Цвет

Редактируя свойство ForeColor, можно выбрать для надписи любой цвет. Программно цвет задается следующим образом:

buttonYellow.ForeColor = System.Drawing.Color.DarkGreen;

Здесь мы задали темно-зеленый цвет надписи, воспользовавшись для этого статической константой

System.Drawing.Color.DarkGreen.

Выравнивание текста

По умолчанию текст надписи центруется внутри окна кнопки. Однако, изменяя свойство TextAlign, можно выровнять текст по правой, левой, верхней или нижней границам. Кроме этого, можно выровнять текст по углам окна кнопки.

Программно выравнивание текста задается следующим образом:

buttonGreen.TextAlign = System.Drawing.ContentAlignment.BottomCenter;

Стиль кнопки

Стиль кнопки задается свойством FlatStyle. Это свойство может иметь следующие значения:

- Flat;

- Popup;

- Standard;

- System

Стиль Standard предназначен для создания обычных «серых» кнопок.

Если выбрать стиль System, то внешний вид кнопки будет определяться настройками ОС.

Кнопка Popup рисуется плоской. Однако когда пользователь указывает на нее курсором мыши, кнопка принимает объемный вид. Этот стиль удобно использовать в тех случаях, когда нужно создать несколько расположенных рядом кнопок. В этом случае кнопка, над которой в настоящий момент находится курсор мыши, будет выделяться своим объемным видом.

Кнопка Flat всегда остается плоской. Но если пользователь располагает над такой кнопкой курсор мыши, кнопка становится темнее.

Стиль кнопки можно можно задать программно, например:

buttonYellow.FlatStyle = System.Windows.Forms.FlatStyle.Popup;

Блокирование кнопки

Для того чтобы заблокировать кнопку, установите значение свойства Enabled равным true. Заблокированная кнопка отображается в форме, однако не реагирует на мышь и клавиатуру, а также не создает событий.

При необходимости приложение может скрыть кнопку или другой элемент управления, установив значение свойства Visible равным false. Скрытый элемент управления не отображается в форме и не создает событий.

Изображение на поверхности кнопки

Можно значительно улучшить внешний вид кнопки, расположив на ее поверхности графическое изображение.

Выбор файла изображения

Чтобы поместить на поверхность кнопки графическое изображение, необходимо отредактировать свойство Image.

Программно изображение на поверхности кнопки задается так:

buttonGreen.Image =  ((System.Drawing.Bitmap)(resources.GetObject("buttonGreen.Image")));

Здесь изображение извлекается из ресурсов приложения с помощью метода resources.GetObject, а затем, после приведения типа к System.Drawing.Bitmap, записывается в свойство Image.

Выравнивание изображения

Редактируя свойство ImageAlign, Вы можете изменить выравнивание изображения, добавленного в кнопку (по умолчанию изображение центрируется в окне кнопки). Это можно делать при помощи средств Microsoft VisualStudio .NET, или программно:

buttonGreen.ImageAlign = System.Drawing.ContentAlignment.TopCenter;

Как правило, если на кнопе имеется и текст, и изображение, нужно задать соответствующее выравнивание и для текста, и для изображения. Например, можно выровнять изображение влево по центру, а текст — вправо по центру. Так же можно выровнять изображение верх по центру, а текст — вниз по центру.

Фоновое изображение для кнопки

Чтобы еще больше улучшить внешний вид кнопки, Вы можете задать для нее фоновое изображение. Оно будет использовано таким же образом, как фоновое изображение формы или Web-страницы.

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

Чтобы задать фоновое изображение для кнопки, отредактируйте свойство BackgroundImage. Это можно сделать во время разработки приложения или из программы:

buttonWhite.BackgroundImage = ((System.Drawing.Bitmap)   (resources.GetObject("buttonWhite.BackgroundImage")));

События

Подготовим обработчик события, предназначенные для изменения цвета панели panel1 класса Panel, расположенной в правой части главного окна этого приложения. Создавая приложение, перетащите эту панель в форму из инструментальной панели Toolbox.

Каждый такой обработчик события устанавливает свойство panel1.BackColor, записывая в него тот или иной цвет:

private void buttonRed_Click(object sender, System.EventArgs e) {   panel1.BackColor = System.Drawing.Color.Red; } … private void buttonWhite_Click(object sender, System.EventArgs e) {   panel1.BackColor = System.Drawing.Color.White; }

Цвет задается как статическая константа класса System.Drawing.Color.

Если в окне проектирования формы щелкнуть кнопку дважды, для нее по умолчанию будет создан обработчик события Click. Однако кнопка, как и остальные элементы управления, создает множество других событий. Чтобы увидеть список событий, создаваемых кнопкой, выделите ее левой клавишей мыши в окне проектирования формы, а затем откройте вкладку событий, расположенную в окне Properties (рис. 1.9).

Рисунок 1.9 - Вкладка событий для кнопки

Как видно, для обработки события Click здесь назначен обработчик button_Red_Click.

Все события, перечисленные на вкладке событий, разделены на группы.

Группа Action (действие) включает в себя только событие.

Группы Mouse (события, связанные с мышью), то в ней имеется целых шесть событий. Они создаются, когда пользователь нажимает кнопку мыши в окне кнопки (событие MouseDown), располагает курсор мыши над поверхностью окна кнопки (MouseEnter) или убирает курсор мыши из этого окна (MouseLeave) и т.д. Выделяя по очереди левой клавишей мыши названия событий, Вы можете прочитать в нижней части вкладки краткое описание условий, при которых это событие возникает.

На вкладке событий Вы можете назначить обработчики для любых событий.

Обработчик button_Red_MouseEnter получит управление, когда курсор мыши входит в область окна кнопки, а обработчик button_Red_MouseLeave - когда курсор мыши выходит из этой области.

Эти обработчики событий раскрашивают панель panel1 в цвет, соответствующий той кнопке, над которой в данный момент находится курсор мыши. Когда курсор мыши покидает область окна кнопки, цвет панели panel1 становится светло-серым.

Прежде всего, добавьте в класс Form1 поле oldColor, предназначенное для хранения исходного цвета фона кнопки:

Color oldColor;

Далее добавьте исходный текст обработчика событий button_Red_MouseEnter, подключенного ко всем кнопкам нашего приложения:

Private void button_Red_MouseEnter (object sender, System.EventArgse)

{   Button btn = (Button)sender;   oldColor = btn.BackColor;   btn.BackColor = Color.Red;

  switch(btn.Text)   {      case "Красный":      {        panel1.BackColor = System.Drawing.Color.Red;        break;      }      … }}

Получив управление, обработчик событий получает идентификатор кнопки, вызвавшей событие, и сохраняет его в переменной btn. Затем обработчик сохраняет в поле oldColor текущий цвет фона кнопки, получая его из свойства btn.BackColor, а затем раскрашивает фон кнопки в красный цвет:

Button btn = (Button)sender; oldColor = btn.BackColor; btn.BackColor = Color.Red;

Далее обработчик события получает текст надписи на кнопке btn.Text и определяет, какая кнопка вызвала появление события:

switch(btn.Text) {   case "Красный":   {     panel1.BackColor = System.Drawing.Color.Red;     break;  }   … }

Далее обработчик событий изменяет соответствующим образом цвет панели panel1.

Когда мышь покидает окно наших кнопок, управление получает обработчик событий buttonsLeave:

private void button_Red_MouseLeave (object sender, System.EventArgs e) {   Button btn = (Button)sender;   btn.BackColor = oldColor;   panel1.BackColor = System.Drawing.Color.LightGray; }

Его задача - восстановление исходного цвета фона кнопки, окно которой покинул курсор мыши, а также раскрашивание панели panel1 в светло-серый цвет.

Создавая подобные обработчики событий можно динамически изменять графическое изображение, расположенное в окне кнопки. Фоновое графическое изображение, текст надписи или шрифтовое оформление этого текста.

Обработка событий MouseDown и MouseUp позволяет задать, например, произвольный вид кнопки в нажатом и отжатом состоянии.

Событие KeyPress

Когда пользователь наживает клавишу, которой соответствует значение ASCII, генерируется событие KeyPress. К этим клавишам относятся все алфавитно-цифровые клавиши (a—z, A—Z, 0—9), а также ряд специальных клавиш, таких, как Enter и Backspace. Если при нажатии клавиши или их комбинации не генерируется ASCII-символ, событие KeyPress также не генерируется. К таким клавишам относятся клавиши-модификаторы Ctrl и Alt, а также все функциональные клавиши.

Это событие очень удобно для перехвата нажатия клавиш и проверки соответствующих символов. При генерации события KeyPress обработчик получает экземпляр класса KeyEventArgs, свойство KeyEventArgs.KeyCode которого содержит ASCII-символ клавиши, нажатие которой спровоцировало это событие. Чтобы проверить, например, была ли нажата цифра, достаточно проверить свойство KeyChar в обработчике события KeyPress.

Пример использования события KeyPress - Проверка ввода в TextBox (ввод только определенных символов)

Иногда встает задача ограничивать возможность ввода в поле элемента Windows Forms - TextBox.

Например, нужно, чтобы данный контрол принимал от пользователя только числа. Вообще-то что для таких ситуаций предусмотрен контрол MaskedTextBox с его настраиваемой маской ввода. Но будем считать, что сейчас нас интересует только TextBox.

Помещаем на форму элемент TextBox.

Переходим в раздел событий вкладки Properties и подписываемся на событие KeyPress данного TextBox.

В сгенерированном обработчике события вставляем код:

public Form1()

{

InitializeComponent();

KeyPreview = true;

}

view plaincopy to clipboardprint?

private void myTextBox_KeyPress(

object sender, KeyPressEventArgs e)

{ if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57))

e.Handled = true; }

Обратите внимание на присутствие в условии сравнения кода вводимого символа с числом 8. Это дает возможность обрабатывать клавишу BackSpase. В итоге, не будут игнорироваться лишь нажатия клавиш цифр, BackSpase, ну и прочих вспомогательных (курсор, Delete ...).

И все-таки, если вам требуется вводить лишь цифры (целочисленные числа), то как вариант возможно воспользоваться методом Char.IsDigit:

private void myTextBox_KeyPress( object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar))

e.Handled = true;

}

События KeyDown и KeyUp

Нажатие и освобождение любой клавиши сопровождается генерацией события KeyDown и KeyUp соответственно. Источником событий является элемент управления, обладающий фокусом ввода. Элемент управления, генерировавший событие, передает сведения о нажатой (или отпущенной) клавише (или сочетании клавиш) через экземпляр класса KeyEventArgs - класса, описывающего сочетание клавиш. В сигнатуре метода, обрабатывающего событие KeyDown или KeyUp, должен быть параметр типа KeyEventsArgs.

Чаще всего события KeyDown и KeyUp используют, чтобы определить, нажаты ли клавиши Alt, Ctrl или Shift. Результат передается обработчику соответствующего события через ссылку на экземпляр класса KeyEventArgs. Его свойства Alt, Ctrl и Shift возвращают значения типа Boolean, указывающие, были ли нажаты соответствующие клавиши. Значение true свидетельствует о том, что клавиша была нажата, а false — о том, что нет.

Ниже показан пример обработчика события KeyUp, проверяющего нажатие клавиши Alt:

private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)

{

if(e.Alt == true)

{

MessageBox.Show("The Alt key still is down");

}

}

Свойство KeyEventArgs.KeyCode позволяет определить, какая именно клавиша спровоцировала событие. Это свойство возвращает код нажатой или отпущенной клавиши (соответственно при событиях KeyDown или KeyUp).

Ниже показан пример простого обработчика события, отображающего сообщение с кодом нажатой клавиши:

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)

{

MessageBox.Show(e.KeyCode.ToString());

}