ИНСТРУКЦИОННАЯ
КАРТА
Тема: Разработка
приложения, использующего кнопочные компоненты
Цель:
отработать умения по созданию формы, содержащей компоненты и элементы
управления, с помощью которых будет создан текстовый файл с данными из формы.
Знать: следующие компоненты WindowsForm: кнопки
(Button), метки (Label), специальные контейнеры, которые
содержат другие элементы, элементы GroupBox, элементы управления списками: ListBox, ComboBox, текстовые
элементы управления: TextBox, элементы для работ с датами:
DateTimePicker.
Уметь: создавать форму, содержащую компоненты: Button,
Label, GroupBox, ListBox,
ComboBox. TextBox, DateTimePicker; создавать
программу, которая будет создавать текстовый файл и копировать в него вводимые
данные из формы.
Оснащение: ПК, ИК
!Электронный отчет по работе должен
содержать:
1.
Проект, созданный в Visual Studio.
2.
Текстовый файл, содержащий ответы на контрольные
вопросы
Теоретический материал
Окно сообщения MessageBox
Как правило, для вывода сообщений применяется элемент
MessageBox. Однако кроме сообственно вывода строки сообщения данный элемент
может устанавливать ряд настроек, которые определяют его поведение.
Для вывода сообщения в классе MessageBox предусмотрен
метод Show, который имеет различные версии и может принимать ряд
параметров. Рассмотрим одну из наиболее используемых версий:
1
2
3
4
5
6
7
8
|
public
static DialogResult Show(
string
text,
string
caption,
MessageBoxButtons
buttons,
MessageBoxIcon
icon,
MessageBoxDefaultButton
defaultButton,
MessageBoxOptions options
)
|
Здесь применяются следующие параметры:
text: текст сообщения
caption: текст заголовка окна сообщения
buttons: кнопки, используемые в окне сообщения.
Принимает одно из значений перечисления MessageBoxButtons:
·
AbortRetryIgnore:
три кнопки Abort (Отмена), Retry (Повтор), Ignore (Пропустить)
·
OK:
одна кнопка OK
·
OKCancel:
две кнопки OK и Cancel (Отмена)
·
RetryCancel:
две кнопки Retry (Повтор) и Cancel (Отмена)
·
YesNo:
две кнопки Yes и No
·
YesNoCancel:
три кнопки Yes, No и Cancel (Отмена)
Таким образом, в зависимости от выбора окно сообщения
может иметь от одной до трех кнопок.
icon: значок окна сообщения. Может принимать одно из
следующих значений перечисления MessageBoxIcon:
·
Asterisk,
Information: значок, состоящий из буквы i в нижнем регистре, помещенной в
кружок
·
Error,
Hand, Stop: значок, состоящий из белого знака "X" на круге красного
цвета.
·
Exclamation,
Warning: значок, состоящий из восклицательного знака в желтом треугольнике
·
Question:
значок, состоящий из вопросительного знака на периметре круга
·
None:
значок у сообщения отсутствует
defaultButton: кнопка, на которую по умолчанию
устанавливается фокус. Принимает одно из значений перечисления MessageBoxDefaultButton:
·
Button1:
первая кнопка из тех, которые задаются перечислением MessageBoxButtons
·
Button2:
вторая кнопка
·
Button3:
третья кнопка
options: параметры окна сообщения. Принимает одно из
значений перечисления MessageBoxOptions:
·
DefaultDesktopOnly:
окно сообщения отображается на активном рабочем столе.
·
RightAlign:
текст окна сообщения выравнивается по правому краю
·
RtlReading:
все элементы окна располагаются в обратном порядке справа налево
·
ServiceNotification:
окно сообщения отображается на активном рабочем столе, даже если в системе не
зарегистрирован ни один пользователь
Нередко используется один параметр - текст сообщения.
Но посмотрим, как использовать остальные параметры. Пусть у нас есть кнопка, в
обработчике нажатия которой открывается следующее окно сообщения:
1
2
3
4
5
6
7
8
9
10
|
private
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(
"Выберите
один из вариантов",
"Сообщение",
MessageBoxButtons.YesNo,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
}
|
ListBox
Элемент ListBox представляет собой простой список.
Ключевым свойством этого элемента является свойство Items, которое
как раз и хранит набор всех элементов списка.
Элементы в список могут добавляться как во время
разработки, так и программным способом. В Visual Studio в окне Properties
(Свойства) для элемента ListBox мы можем найти свойство Items. После двойного
щелчка на свойство нам отобразится окно для добавления элементов в список:
В пустое поле мы вводим по одному элементу списка - по
одному на каждой строке. После этого все добавленные нами элементы окажутся в
списке, и мы сможем ими управлять:
Программное управление элементами в
ListBox
Добавление элементов
Итак, все элементы списка входят в
свойство Items, которое представляет собой коллекцию. Для добавления
нового элемента в эту коллекцию, а значит и в список, надо использовать метод
Add, например: listBox1.Items.Add("Новый элемент");. При
использовании этого метода каждый добавляемый элемент добавляется в конец
списка.
Можно добавить сразу несколько элементов, например,
массив. Для этого используется метод AddRange:
1
2
|
string[] countries = { "Бразилия",
"Аргентина", "Чили", "Уругвай",
"Колумбия" };
listBox1.Items.AddRange(countries);
|
Вставка элементов
В отличие от простого добавления вставка производится
по определенному индексу списка с помощью метода Insert:
1
|
listBox1.Items.Insert(1, "Парагвай");
|
В данном случае вставляем элемент на вторую позицию в
списке, так как отсчет позиций начинается с нуля.
Удаление элементов
Для удаления элемента по его тексту используется
метод Remove:
1
|
listBox1.Items.Remove("Чили");
|
Чтобы удалить элемент по его индексу в списке,
используется метод RemoveAt:
1
|
listBox1.Items.RemoveAt(1);
|
Кроме того, можно очистить сразу весь список, применив
метод Clear:
1
|
listBox1.Items.Clear();
|
Доступ к элементам списка
Используя индекс элемента, можно сам элемент в списке.
Например, получим первый элемент списка:
1
|
string firstElement = listBox1.Items[0];
|
Метод Count позволяет определить количество
элементов в списке:
1
|
int
number = listBox1.Items.Count();
|
Выделение элементов списка
При выделении элементов списка мы можем ими управлять
как через индекс, так и через сам выделенный элемент. Получить выделенные
элементы можно с помощью следующих свойств элемента ListBox:
·
SelectedIndex:
возвращает или устанавливает номер выделенного элемента списка. Если выделенные
элементы отсутствуют, тогда свойство имеет значение -1
·
SelectedIndices:
возвращает или устанавливает коллекцию выделенных элементов в виде набора их
индексов
·
SelectedItem:
возвращает или устанавливает текст выделенного элемента
·
SelectedItems:
возвращает или устанавливает выделенные элементы в виде коллекции
По умолчанию список поддерживает выделение одного
элемента. Чтобы добавить возможность выделения нескольких элементов, надо
установить у его свойства SelectionMode значение MultiSimple.
Чтобы выделить элемент програмно, надо применить
метод SetSelected(int index, bool value), где index - номер выделенного
элемента. Если второй параметр - value имеет значение true, то элемент по
указанному индексу выделяется, если false, то выделение наоборот
скрывается:
1
|
listBox1.SetSelected(2, true); // будет выделен третий
элемент
|
Чтобы снять выделение со всех выделенных элементов,
используется метод ClearSelected.
Событие SelectedIndexChanged
Из всех событий элемента ListBox надо отметить в
первую очередь событие SelectedIndexChanged, которое возникает при
изменении выделенного элемента:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
string[]
countries = { "Бразилия", "Аргентина", "Чили",
"Уругвай", "Колумбия" };
listBox1.Items.AddRange(countries);
listBox1.SelectedIndexChanged
+= listBox1_SelectedIndexChanged;
}
void
listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string
selectedCountry = listBox1.SelectedItem.ToString();
MessageBox.Show(selectedCountry);
}
}
|
В данном случае по выбору элемента списка будет
отображаться сообщение с выделенным элементом.
Элемент ComboBox
Элемент ComboBox образует выпадающий список и совмещает
функциональность компонентов ListBox и TextBox. Для хранения элементов списка в
ComboBox также предназначено свойство Items.
Подобным образом, как и с ListBox, мы можем в окне
свойств на свойство Items и нам отобразится окно для добавления элементов
ComboBox:
И как и с компонентом ListBox, здесь мы также можем
программно управлять элементами.
Добавление элементов:
1
2
3
4
5
6
|
// добавляем один элемент
comboBox1.Items.Add("Парагвай");
// добавляем набор элементов
comboBox1.Items.AddRange(new string[] {
"Уругвай", "Эквадор" });
// добавляем один элемент на определенную позицию
comboBox1.Items.Insert(1, "Боливия");
|
При добавлении с помощью методов Add / AddRange все
новые элементы помещаются в конец списка. Однако если мы зададим у ComboBox свойство Sorted равным true,
тогда при добавлении будет автоматически производиться сортировка.
Удаление элементов:
1
2
3
4
5
6
|
// удаляем один элемент
comboBox1.Items.Remove("Аргентина");
// удаляем элемент по индексу
comboBox1.Items.RemoveAt(1);
// удаляем все элементы
comboBox1.Items.Clear();
|
Мы можем получить элемент по индексу и производить с
ним разные действия. Например, изменить его:
1
|
comboBox1.Items[0] = "Парагвай";
|
Настройка оформления ComboBox
С помощью ряда свойств можно настроить стиль оформления
компонента. Так, свойство DropDownWidth задает ширину
выпадающего списка. С помощью свойства DropDownHeight можно
установить высоту выпадающего списка.
Еще одно свойство MaxDropDownItems позволяет
задать число видимых элементов списка - от 1 до 100. По умолчанию это число
равно 8.
Другое свойство DropDownStyle задает
стиль ComboBox. Оно может принимать три возможных значения:
·
Dropdown:
используется по умолчанию. Мы можем открыть выпадающий список вариантов при
вводе значения в текстовое поле или нажав на кнопку со стрелкой в правой части
элемента, и нам отобразится собственно выпадающий список, в котором можно
выбрать возможный вариант
·
DropdownList: чтобы
открыть выпадающий список, надо нажать на кнопку со стрелкой в правой стороне
элемента
·
Simple: ComboBox
представляет простое текстовое поле, в котором для перехода между элементами мы
можем использовать клавиши клавиатуры вверх/вниз
Событие SelectedIndexChanged
Наиболее важным событием для ComboBox также является
событие SelectedIndexChanged, позволяющее отследить выбор элемента в
списке:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
comboBox1.SelectedIndexChanged
+= comboBox1_SelectedIndexChanged;
}
void
comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string
selectedState = comboBox1.SelectedItem.ToString();
MessageBox.Show(selectedState);
}
}
|
Здесь также свойство SelectedItem будет
ссылаться на выбранный элемент.
Привязка данных в ListBox и ComboBox
Кроме прямого добавления элементов в
коллекцию Items компонентов ListBox и ComboBox мы также можем использовать
механизм привязки данных.
Привязка данных в ListBox и ComboBox реализуется с
помощью следующих свойств:
·
DataSource: источник
данных - какой-нибудь массив или коллекция объектов
·
DisplayMember: свойство
объекта, которое будет использоваться для отображения в ListBox / ComboBox
·
ValueMember: свойство
объекта, которое будет использоваться в качестве его значения
Рассмотрим пример.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public
partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
List<Phone>
phones = new List<Phone>
{
new
Phone { Id=11, Name="Samsung Galaxy Ace 2", Year=2012},
new
Phone { Id=12, Name="Samsung Galaxy S4", Year=2013},
new
Phone { Id=13, Name="iPhone 6", Year=2014},
new
Phone { Id=14, Name="Microsoft Lumia 435", Year=2015},
new
Phone { Id=15, Name="Xiaomi Mi 5", Year=2015}
};
listBox1.DataSource
= phones;
listBox1.DisplayMember
= "Name";
listBox1.ValueMember
= "Id";
listBox1.SelectedIndexChanged
+= listBox1_SelectedIndexChanged;
}
void
listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//
получаем id выделенного объекта
int
id = (int)listBox1.SelectedValue;
//
получаем весь выделенный объект
Phone
phone = (Phone)listBox1.SelectedItem;
MessageBox.Show(id.ToString()
+ ". " + phone.Name);
}
}
class
Phone
{
public
int Id { get; set; }
public
string Name { get; set; }
public
int Year { get; set; }
}
|
Запись в файл и
StreamWriter
Для записи в текстовый файл используется класс StreamWriter.
Свою функциональность он реализует через следующие методы:
·
Close:
закрывает записываемый файл и освобождает все ресурсы
·
Flush:
записывает в файл оставшиеся в буфере данные и очищает буфер.
·
Write:
записывает в файл данные простейших типов, как int, double, char, string и т.д.
·
WriteLine:
также записывает данные, только после записи добавляет в файл символ окончания
строки
Рассмотрим запись в файл на примере:
Здесь сначала мы считываем файл в переменную text, а
затем записываем эту переменную в файл, а затем через объект StreamWriter
записываем в новый файл.
Класс StreamWriter имеет несколько конструкторов.
Здесь мы использовали один из них: new StreamWriter(writePath, false,
System.Text.Encoding.Default). В качестве первого параметра передается
путь к записываемому файлу. Второй параметр представляет булевую переменную,
которая определяет, будет файл дозаписываться или перезаписываться. Если этот
параметр равен true, то новые
данные добавляются в конце к уже имеющимся данным. Если false, то файл
перезаписывается. И если в первом случае файл перезаписывается, то во втором
делается дозапись в конец файла.
Третий параметр указывает
кодировку, в которой записывается файл.
Практическая часть
Постановка задачи. Разработать программу для
создания текстового файла, в котором будут отражаться следующие сведения:
·
фамилия и имя страхователя;
·
адрес (город, улица, дом, квартира)
·
пол страхователя;
·
срок страхования;
·
вид страхования.
Разработка формы пользователя. Форма пользователя
с элементами управления для создания текстового файла должна иметь такой же
вид, как на картинке:
Для удобства ввода данных, кроме элементов Поле в форме предусмотрены: элемент Счетчик – для установки строка
страхования; элемент Поле со
списком
– для ввода вида страхования. Предусмотрите элемент Надпись для вывода сообщения об ошибке, при не
заполнении какого-либо поля ввода.
Текстовый файл должен создаваться в папке проекта Debug с
именем Страхователи.txt. Пример текстового файла:
Выполните следующие действия:
1.
Создайте форму пользователя и разместите в ней
элементы управления.
2.
Элементам управления присвойте имена и свойства.
3.
Для процедуры обработки события Click кнопки Ok запишите код, который отвечает за
копирование данных из полей в текстовый файл (Файл должен дозаписываться, а не
перезаписываться). Если какое-либо поле не заполнено, внизу формы должна
появиться надпись «Не все данные введены!». Если данные все введены, должно
появиться сообщение MessageBox и все поля очищаются:
4.
Для процедуры обработки события Click кнопки Отмена запишите код для закрывания формы.
5.
Запустите программу на выполнение. Проверьте
работоспособность и, в случае необходимости, устраните ошибки в программе.
6.
Создайте папку Release.
7.
Сохраните проект на Колледжсервере в папке группы
под своей фамилией.
Вопросы для контроля знаний
1. Какое свойство отвечает за вид и поведение
границы и строки заголовка формы?
3. Что такое пользовательская форма?
4. Для чего используются списки?
5. Какие элементы поддерживают редактирование
текста в C#?
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.