Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Порядок выполнения лабораторных работ

Поиск

Для выполнения всех лабораторных работ предлагается следующий порядок:

Ознакомиться с теоретическим материалом,

2. выполнить индивидуальное задание,

Составить отчет о проделанной работе.

Варианты индивидуального задания определяются преподавателем.

Содержание отчета

Отчет оформляется по каждой лабораторной работе и состоит из следующих разделов:

Тема лабораторной работы,

Цель работы,

3. индивидуальное задание,

4. краткое описание хода выполнения задания.

Код файла реализации или разработанная диаграмма,

Скриншоты программы.

Порядок защиты лабораторной работы

1. Демонстрация выполненного задания;

2. Ответы на контрольные вопросы;

Сдача отчета.

Лабораторная работа №1

 

Создание простейшего Windows Application проекта в среде разработки Visual Studio.

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

Вывод текстовой информации

 

1. Создание простейшего Windows Application проекта

Для создания Windows Application решения C# (приложения, проекта), после запуска Visual Studio, нажимаем на кнопку в New Project (левая на панели инструментов), или нажимаем комбинацию клавиш Ctrl + Shift + N, или заходим в меню File и далее выбираем New и затем Project. На экране появляется диалоговая панель New Project (рис.1.1).

 

 

Рисунок 1.1 - Диалоговая панель New Project

 

Выбираем и задаем:

Project Types: Visual C#;

Templates: Windows Application;

Name: пишем то имя, с которым будет сформирован .exe файл;

Location: директория в которой будет помещен проект (для удобства желательно создать директорию поближе к корню диска, например C:\SamplesC#);

Можно поставить галочку "Create Directory for Solytion" или задать директорию для данного решения в выбранной папке (Browse...).

Нажимаем Ok.

В редакторе кода появилась заготовка окна на вкладке Form1.cs[Designe] (рис. 1.2), а в папке C:\SamplesC# папка WindowsApplication1 c файлом WindowsApplication.sln (файл проекта решения) и подпапка WindowsApplication со своими подпапками Bin, Obj, Properties, которые пока содержат пустые поддиректории и, в которые, будут помещаться файлы, необходимые для сборки и отладки программы и .exe файл, о чем речь пойдет ниже. Файлы проекта Form1.cs, Form1.Designer.cs, Program.cs и WindowsApplication.csproj располагаются в подпапке WindowsApplication1.

 

 

Рисунок 1.2 - Заготовка окна на вкладке Form1.cs[Designe]

 

В окне " Solutation Explorer " (Меню Viev | Solutation Explorer) выполним правый клик мышкой на файле проекта - " Form1.cs " - и выберем пункт меню " Viev Code " (или нажимаем F7), вызываем файл кода проекта (рис. 1.3).

В данном файле только определения класса формы (Form1) с единственной пока функцией конструктора. Однако это не означает, что функция main исчезла вообще - ее разработчики просто перенесли в другой файл - Program.cs (рис.1.4).

 

 

Рисунок 1.3 - Файл кода проекта

 

 

Рисунок 1.4 – Функция main

Код содержит статическую функцию Main(). В ней и осуществляется инициализация приложения. При этом создается экземпляр класса Form1, конструктор которого вызывает функцию InitializeComponent(), выполняющую необходимые начальные установки.

Возвращаемся к дизайнеру формы (вкладка Form1.cs[Design]), вызовем свойства формы (P roperties) в контекстном меню формы (рис.1.5), кликнув правой кнопкой мышки на бланке формы (или меню View\Properties Window Ctrl+W, P) и в окне Properties из множества свойств установим:

1) Свойство Text - Hеllo World C#;

2) BackColor - выберем (клик мышкой на поле и нажать стрелочку вниз) понравившийся нам цвет формы из трех возможных наборов;

3) StartPosition - CenterScreen (установим позицию формы при запуске - по центру)

 

 

Рисунок 1.5 - Свойства формы (P roperties)

Вновь посмотрим код в окне Form1.Designe.cs - изменилась функция InitializeComponent() - в ней появились внесенные изменения:

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = Sytem.Windows.Forms.AutoScaleMode.Font;

this.BackColor = System.Drawing.Color.FromArgb

(((int)(((byte)(255)))), ((int)(((byte)(224)))), ((int)(((byte)(192)))));

this.ClientSize = new System.Drawing.Size(298, 172);

this.Name = "Form1";

this.Text = "Hello World C#";

this.ResumeLayout(false);

Затем изменим свойство Icon (в поле выбора нажимаем кнопочку с тремя точками и из файлов загрузим какую-либо картинку) и вновь посмотрим изменения в коде в файле Form1.Designe.cs:

this.Icon = ((Sytem.Drawing.Icon)(resources.GetObject("$this.Icon")));

Видно, что здесь появился вызов System.Drawing.Iсon, в качестве параметра которого выступает объект, помещенный в файл ресурсов - Form1.resx. Откроем его (с помощью контекстного меню узла Solutation Explorer - View Code) и убедимся, что такой ресурс есть (это XML файл).

<assembly alias="System.Drawing" name="System.Drawing,

Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing"

mimetype="application/x-microsoft.net.object.bytearray.base64">

<value>

AAABAAEAEBAQAAA.....

и далее двоичный код картинки

............

</value>

</data>

В контекстном меню закладки Form.resx выберем пункт View Designer. В окне Open Width можем выбрать подходящий редактор (для данного случая Resource Editor) и отредактировать ресурс (в данном случае иконку) (рис. 1.6)

 

Рисунок 1.6 – Редактирование иконки

 

В свойство формы BackgroundImage добавим картинку, как показано на рисунке 1.7, и не забудем поставить для свойства BackgroundImageLayout значение Stretch.

Рассмотрим наиболее интересные свойства нашего окна.

1. FormBorderStyle - Позволяет задавать рамку окна и его поведение, то есть фиксированный, растягиваемый и т.д.

2. Text - Задает заголовок окна

3. MaximumSize и MinimumSize - задают соответственно максимальный и минимальный размер окна

4. StartPosition - Задает позицию в которой будет первоначально формироваться окно. Например: CenterScreen или CenterParent

5. WindowState - позволяет задать состояние окна (свернутое или развернутое на весь экран)

6. Icon - Задает иконку для окна

7. MaximizeBox и MinimizeBox - позволяет скрыть кнопки управления состоянием окна (кнопки в правом верхнем углу окна)

8. Opacity - задает прозрачность окна

9. ShowIcon - Показывать или нет иконку

10. ShowInTaskBar - Показывать или нет окно в windows explorer

11. TopMost - Окно будет поверх остальных окон.

 

 

Рисунок 1.7 – Добавление фона формы

Теперь нажимаем F5 (меню Debug/Start Debuging) и видим созданное приложение на рисунке 1.8:

 

 

Рисунок 1.8 - Приложение Hello World C#

 

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());

}

2.2. Контрол TextBox

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

Свойства:

1. Text - Собственно строка введенного текста

2. CharacterCasing - возможность вводить только большие буквы или только строчные

3. MultiLine - Текстовое поле трансформируется в поле для ввода нескольких строк

4. PasswordChar - Если установлен какой либо символ, то поле маскирует ввод текста под пароль и текст скрывается под введенный символ (например звездочку)

5. ReadOnly - в true текстовое поле недоступно для редактирования.

События:

По умолчанию в Studio выделен TextChanged - отрабатывает когда текст в поле изменен. Протестировать можно следующим образом. Добавляем на форму еще Label в текст будем выводить то, что сейчас есть в нашем текстовом поле вот так (рис. 1.10)

private void textBox1_TextChanged(object sender, EventArgs e)
{
label1.Text = textBox1.Text;
}

Рисунок 1.10 – Результат изменения текста

 

2. 3. Контрол ComboBox

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

Свойства:

1. Text - Надпись на контроле. Надо понимать, что это не элемент списка а всего лишь первоначальная надпись. И при выборе одного из элементов списка надпись больше не появится.

2. Sorted - Сортирует список

3. Items - Собственно сама коллекция

4. DropDownStyle - выбор стиля контрола

Работа с элементами списка проходит через Items у которого есть методы

1. Add - Добавление элемента в список

2. Clear - Очищает список

3. Remove - Удаляет элемент списка

Для примера заполним список числами от 0 до 100 (рис. 1.11)

for (int i = 0; i < 100; i++)
comboBox1.Items.Add(i);

 

Рисунок 1.11 – Результат заполнения списка

Узнать выбранный элемент можно используя свойства SelectedItem, SelectedText, SelectedIndex

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(comboBox1.SelectedItem.ToString());
}

Данный код помещен в обработчик события SelectedIndexChanged, который выполняется, как только сменится элемент списка (рис. 1.12)

 

 

Рисунок 1.12 – Результат исполнения кода,

помещенного в обработчик событий

 

2.4. Контрол ListBox

Перенесите на форму контрол ListBox и назовите его - ListBoxes. Добавьте на форму элемент TextBox с именем ItemName и три кнопки под названием cmdAdd (добавить), cmdRem (удалить) и cmdClr (очистить) (рис. 1.13).

Дважды щелкните на " cmdAdd " кнопку, чтобы получить в случае cmdAdd_Click и введите следующий код:

private void cmdAdd_Click(object sender, System.EventArgs e)

{ if(itemName.Text == "") // Проверка на ввод данных, если поле пустое

{

MessageBox.Show("Введите данные.", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

else

{

itemList.Items.Add(itemName.Text);

}

}

 

Рисунок 1.13 – Контрол ListBox

 

Кнопка “Удалить» действует аналогично.

private void cmdRem_Click(object sender, System.EventArgs e)

{

if(itemList.SelectedIndex == -1)

{

MessageBox.Show("Выберите значение", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

else

{

itemList.Items.RemoveAt(itemList.SelectedIndex);

}

}

Каждый элемент в списке имеет индекс. Свойство SelectedIndex показывает нам, какой элемент выбран в данный момент в списке. Если ни один элемент не выбран SelectedIndex свойство имеет значение -1. (if(itemList.SelectedIndex == -1))

Выбранный элемент можно удалить его с помощью Items.RemoveAt () и передача индекс выбранного элемента с помощью свойства itemList.SelectedIndex.

Очистить весь список можно используя метод Clear()

private void cmdClr_Click(object sender, System.EventArgs e)

{

itemList.Items.Clear();

}

2.5. Панели GroupBox и Panel

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

Элемент управления GroupBox снабжается рамкой с надписью, объясняющей назначение объединяемых внутри рамки элементов управления. Что же касается панели Panel, то она представляет собой прямоугольное окно без надписи, внутри которого можно помещать произвольные объекты. Эта панель может иметь полосы прокрутки.

Добавление объектов в панели

На этапе инициализации приложения создается сам элемент управления GroupBox (как объект класса System.Windows.Forms.GroupBox), и флажки с зависимой фиксацией:

this.groupBox1 = new System.Windows.Forms.GroupBox();

this.radioButtonBkgRed = new System.Windows.Forms.RadioButton();

this.radioButtonBkgGreen = new System.Windows.Forms.RadioButton();

this.radioButtonBkgBlue = new System.Windows.Forms.RadioButton();

this.radioButtonBkgWhite = new System.Windows.Forms.RadioButton();

Далее флажки добавляются в элемент управления GroupBox при помощи метода AddRange:

//

// groupBox1

//

this.groupBox1.Controls.AddRange(

new System.Windows.Forms.Control[]

{

this.radioButtonBkgWhite,

this.radioButtonBkgBlue,

this.radioButtonBkgGreen,

this.radioButtonBkgRed

});

Таким образом, флажки оказываются добавленными к панели groupBox1 класса GroupBox. Далее программа настраивает свойства панели GroupBox, определяющие ее расположение, размеры, текст надписи и т.д.:

this.groupBox1.Location = new System.Drawing.Point(24, 16);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size(152, 136);

this.groupBox1.TabIndex = 0;

this.groupBox1.TabStop = false;

this.groupBox1.Text = "Укажите цвет фона";

Аналогичным образом создается панель panel1 класса Panel, надпись и флажки, расположенные внутри панели:

this.panel1 = new System.Windows.Forms.Panel();

this.label1 = new System.Windows.Forms.Label();

this.radioButtonForeRed = new System.Windows.Forms.RadioButton();

this.radioButtonForeGreen = new System.Windows.Forms.RadioButton();

this.radioButtonForeBlue = new System.Windows.Forms.RadioButton();

this.radioButtonForeBlack = new System.Windows.Forms.RadioButton();

Все объекты, расположенные внутри правой панели, добавляются в нее все тем же методом AddRange:

//

// panel1

//

this.panel1.Controls.AddRange(

new System.Windows.Forms.Control[]

{

this.radioButtonForeBlack,

this.radioButtonForeBlue,

this.radioButtonForeGreen,

this.radioButtonForeRed,

this.label1

});

this.panel1.Location = new System.Drawing.Point(192, 8);

this.panel1.Name = "panel1";

this.panel1.Size = new System.Drawing.Size(152, 144);

this.panel1.TabIndex = 1;

Обратите внимание, что в панель panel1 добавляются не только флажки, но и надпись label1 класса Label.

Обработка событий

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

Чтобы создать обработчик событий bkgChanged для группы флажков, отвечающих за изменение цвета фона нашей надписи, выделите любой флажок в группе «Укажите цвет фона». Затем в окне Properties откройте вкладку событий, введите в поле CheckedChanged строку bkgChanged и нажмите клавишу Enter. В результате будет создано тело обработчика событий bkgChanged.

Далее выделите по очереди все остальные флажки группы. Укажите цвет фона, и назначьте для них обработчик событий bkgChanged при помощи только что упомянутого окна Properties. Таким образом, изменение состояния всех флажков группы «Укажите цвет фона» будет отслеживаться единым обработчиком событий bkgChanged.

Далее повторите эту операцию для группы флажков «Укажите цвет текста», расположенной в правой части главного окна приложения. Назначьте для них обработчик событий foreChanged.

Ниже приведены модифицированные исходные тексты обработчиков событий bkgChanged и foreChanged:

private void bkgChanged(object sender, System.EventArgs e)

{

RadioButton rb = (RadioButton)sender;

switch(rb.Text)

{

case "Красный":

{

label2.BackColor = Color.LightCoral;

break;

}

case "Зеленый":

{

label2.BackColor = Color.LightGreen;

break;

}

case "Синий":

{

label2.BackColor = Color.LightBlue;

break;

}

case "Белый":

{

label2.BackColor = Color.White;

break;

}

}

}

 

private void foreChanged(object sender, System.EventArgs e)

{

RadioButton rb = (RadioButton)sender;

 

switch(rb.Text)

{

case "Красный":

{

label2.ForeColor = Color.Red;

break;

}

case "Зеленый":

{

label2.ForeColor = Color.Green;

break;

}

case "Синий":

{

label2.ForeColor = Color.Blue;

break;

}

case "Белый":

{

label2.ForeColor = Color.White;

break;

}

}

}

Эти обработчики событий работают по одинаковому алгоритму. Вначале они сохраняют в переменной rb идентификатор флажка, состояние которого было изменено. Затем обработчики извлекают текст надписи, расположенной возле флажка. В зависимости от этого текста, обработчики изменяют цвет фона или текста надписи label2, расположенной в нижней части главного окна нашего приложения.

При необходимости приложение может обрабатывать и другие события, создаваемые флажками с зависимой фиксацией. Полный список и кроткое описание этих событий можно просмотреть на вкладке событий окна Properties. Обрабатывая, например, события MouseEnter и MouseLeave, можно динамически изменять внешний вид флажка, когда над ним находится курсор мыши.

 

2. 6. Класс Random и его функции

Во многих приложениях требуется умение генерировать случайные числа. Все необходимые для этого средства содержит класс Random. Класс Random имеет конструктор класса: для того, чтобы вызывать методы класса, нужно вначале создать экземпляр класса.

Рассмотрим методы класса Random со статусом public, необходимые для генерирования последовательностей случайных чисел.

Начнем рассмотрение с конструктора класса. Он перегружен и имеет две реализации. Одна из них позволяет генерировать неповторяющиеся при каждом запуске серии случайных чисел. Начальный элемент такой серии строится на основе текущей даты и времени, что гарантирует уникальность серии. Этот конструктор вызывается без параметров. Он описан как public Random(). Другой конструктор с параметром - public Random (int ) обеспечивает важную возможность генерирования повторяющейся серии случайных чисел. Параметр конструктора используется для построения начального элемента серии, поэтому при задании одного и того же значения параметра серия будет повторяться.

Перегруженный метод public int Next () при каждом вызове возвращает положительное целое, равномерно распределенное в некотором диапазоне. Диапазон задается параметрами метода. Три реализации метода отличаются набором параметров:

- public int Next () - метод без параметров выдает целые положительные числа во всем положительном диапазоне типа int;

- public int Next(int max) - выдает целые положительные числа в диапазоне [0, max ];

- public int Next(int min, int max) - выдает целые положительные числа в диапазоне [ min,max ].

Метод public double NextDouble () имеет одну реализацию. При каждом вызове этого метода выдается новое случайное число, равномерно распределенное в интервале [0-1).

Еще один полезный метод класса Random позволяет при одном обращении получать целую серию случайных чисел. Метод имеет параметр - массив, который и будет заполнен случайными числами. Метод описан как public void NextBytes ( byte [ ] buffer ). Так как параметр buffer представляет массив байтов, то, естественно, генерированные случайные числа находятся в диапазоне [0, 255].

Приведем теперь пример работы со случайными числами. Для проведения экспериментов по генерации случайных чисел создадим метод Rand в классе Testing. Вот программный код этого метода:

/// <summary>

/// Эксперименты с классом Random
/// </summary>
public void Rand() {
const int initRnd = 77;
Random realRnd = new Random();
Random repeatRnd = new Random(initRnd);
// случайные числа в диапазоне [0,1)
Console.WriteLine("случайные числа в диапазоне[0,1)");
for (int i = 1; i <= 5; i++) { //1
Console.WriteLine (“Число " + i + "=" + realRnd.NextDouble());
}//for1
// случайные числа в диапазоне[min,max]
int min = -100, max = -10;
Console.WriteLine("случайные числа в диапазоне [" + min + "," + max + "]");
for (int i = 1; i <= 5; i++) { //2
Console.WriteLine("Число " + i + "= " + realRnd.Next(min, max));
}//for2
// случайный массив байтов
byte[ ] bar = new byte[10];
repeatRnd.NextBytes(bar);
Console.WriteLine("Массив случайных чисел в диапазоне [0, 255]");
for (int i = 0; i < 10; i++) {//3
Console.WriteLine("Число " + i + "= " + bar[i]);
}//for3

} //Rand

 

Результаты вывода можно увидеть на рисунке 1.14.

 

Рисунок 1.14 - Генерирование последовательностей случайных

чисел в процедуре Rand

3. Вывод текстовой информации

 



Поделиться:


Последнее изменение этой страницы: 2016-06-29; просмотров: 136; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.38.184 (0.015 с.)