- •Введение
- •1 Компоненты Visual C#
- •1.1 Компонент класса GroupBox
- •1.2 Компонент класса RadioButton
- •1.3 Компонент класса CheckBox
- •1.4 Компонент класса ListBox
- •1.5 Компонент класса Form
- •1.6 Компонент класса PictureBox
- •1.7 Компонент класса Timer
- •1.8 Компонент класса MenuStrip
- •1.9 Компоненты классов ToolStrip и ToolStripButton
- •1.10 Компоненты классов StatusStrip и ToolStripStatusLabel
- •1.11 Компоненты классов OpenFileDialog и SaveFileDialog
- •1.12 Компонент класса TreeView
- •2 Примеры выполнения практических заданий
- •2.1 Стандартные алгоритмы
- •2.2 Элементы выбора
- •2.3 Простейшие классы
- •2.4 Графика
- •2.5 Диалоговые окна
- •2.6 Комплексное задание
- •2.7 Наследование
- •2.8 Древовидные структуры
- •Список литературы
else
/* Если элемент не выбран, то вывод сообщения */ MessageBox.Show("Не выбран элемент в списке",
"Информация");
}
Внешний вид и пример работы программы показаны на рисунке 6.
Рисунок 6 – Внешний вид и пример работы программы (основная форма и диалоговое окно), реализующей работу с диалоговыми окнами
2.6 Комплексное задание
Задание: Доработать программу раздела 2.5 обеспечив использование меню, панели инструментов, строки состояния, механизма действий, стандартных диалоговых окон. Организовать сохранение и чтение списка людей с использованием текстовых файлов. Обеспечить запрет недопустимых действий. Вывести данные о людях в порядке возрастания ФИО в виде списка строк формата «<ФИО> <серия паспорта> <номер паспорта>».
Добавим на форму компоненты:
Main_MS класса MenuStrip для формирования основного меню программы;
Main_TS класса ToolStrip для создания панели инструментов;
Main_SS класса StatusStrip для создания строки состояния;
32
Load_B класса Button для активизации загрузки ранее сохраненного списка людей;
Save_B класса Button для активизации сохранения списка людей;
Calc_B класса Button для активизации вывода списка людей в задан-
ном формате;
FormatSpisok_L класса Label для подписи компонента
FormatSpisok_LB;
FormatSpisok_LB класса ListBox для вывода списка людей в задан-
ном формате;
Open_D класса OpenFileDialog для обеспечения выбора файла для загрузки списка людей;
Save_D класса SaveFileDialog для обеспечения выбора файла для сохранения списка людей.
На панели инструментов Main_TS создадим шесть кнопок панели ин-
струментов: Add_TSB, Change_TSB, Del_TSB, Load_TSB, Save_TSB, Calc_TSB.
В основном меню Main_MS создадим раздел меню «Дейс&твие», в кото-
ром создадим шесть пунктов: Add_TSMI, Change_TSMI, Del_TSMI, Load_TSMI,
Save_TSMI, Calc_TSMI.
Зададим кнопкам панели инструментов и пунктам меню рисунки (свой-
ство Image).
В строке состояния создадим три панели (FIO_TSSL, Series_TSSL, Number_TSSL) и установим у них необходимую для отображения информации ширину.
Для одновременной блокировки или разблокировки обычных кнопок, кнопок панели инструментов и пунктов меню создадим методы в классе основной формы, параметром которых будет требуемое состояние кнопок:
/* Для операции "Изменить" */ private void Change_ED(bool Value)
{
Change_B.Enabled = Value;
Change_TSB.Enabled = Value; Change_TSMI.Enabled = Value;
}
/* Для операции "Удалить" */1 private void Del_ED(bool Value)
{
...;
}
/* Для операции "Сохранить" */ private void Save_ED(bool Value)
1 Здесь и далее программная реализация приведена не полностью, чтобы обеспечить самостоятельную доработку программы на основе изученного ранее материала.
33
{
...;
}
/* Для операции "Расчет" */ private void Calc_ED(bool Value)
{
...;
}
Опишем событие Click кнопки Save_B:
private void Save_B_Click(object sender, EventArgs e)
{
Save_D.FileName = ""; // Имя файла "по умолчанию" не задано /* Вызов диалогового окна выбора файла для сохранения и
проверка результата завершения его работы. Если окно закрыто с подтверждением сохранения, то выполнение
действий по сохранению списка людей */
if (Save_D.ShowDialog() == DialogResult.OK)
{
/* Создание текстового файла */
using (StreamWriter sw = new StreamWriter( File.Open(Save_D.FileName, FileMode.Create)))
{
for (int i=0; i<Spisok_LB.Items.Count; i++)
{
/* Получение i-го человека из списка */ TPeople People = ...;
/* Сохранение каждого параметра отдельной строкой */ sw.WriteLine(People.FIO);
...;
}
}
}
}
Опишем событие Click кнопки Load_B:
private void Load_B_Click(object sender, EventArgs e)
{
Open_D.FileName = ""; // Имя файла "по умолчанию" не задано /* Вызов диалогового окна выбора файла для загрузки и
проверка результата завершения его работы. Если окно
закрыто с подтверждением загрузки, то выполнение действий
по чтению списка людей */
if (Open_D.ShowDialog() == DialogResult.OK)
{
/* Перед чтением данных требуется очистка компонента
Spisok_LB */
...;
34
/* Очистка строки состояния */ FIO_TSSL.Text = ""; Series_TSSL.Text = ""; Number_TSSL.Text = "";
/* Чтение данных из файла */
using (StreamReader sr = new StreamReader( File.Open(Open_D.FileName, FileMode.Open)))
{
while (!sr.EndOfStream)
{
/* Создание экземпляра класса */ TPeople People = ...;
/* Чтение каждого параметра отдельной командой */ People.FIO = sr.ReadLine();
...;
/* Добавление считанных данных в Spisok_LB */
...;
}
}
/* Установка доступности действий */ Change_ED(false); // Запрещено, т.к. в Spisok_LB
Del_ED(false); |
// |
ничего не выбрано |
Calc_ED(true); |
// Разрешено, т.к. из файла |
|
Save_ED(true); |
// |
считаны данные1 |
}
}
Опишем событие Click кнопки Calc_B:
private void Calc_B_Click(object sender, EventArgs e)
{
int i;
/* Выделение памяти для динамического массива людей */ TPeople[] Peoples = new TPeople[Spisok_LB.Items.Count]; /* Заполнение динамического массива людей */
for (i=0; i<Spisok_LB.Items.Count; i++) Peoples[i] = Spisok_LB.Items[i] as TPeople;
/* Сортировка массива */
...; /* Очистка старых результатов и вывод отсортированного
списка людей в заданном формате */ FormatSpisok_LB.Items.Clear();
for (i=0; i<Spisok_LB.Items.Count; i++) FormatSpisok_LB.Items.Add(Peoples[i].FIO+" "+
Peoples[i].Series+" "+ Peoples[i].Number);
}
Установим следующие значения свойств компонентов (таблица 7):
1 Будем считать, что запись разрешена только в случае наличия данных в Spisok_LB. Поэтому после чтения из файла имеются данные хотя бы одного человека.
35
Таблица 7 – Значения свойств компонентов для |
примера программы, |
||
реализующей комплексное задание |
|
||
|
|
|
|
Компонент.Свойство(Событие) |
|
Значение |
|
Change_B.Enabled |
false |
|
|
|
|
|
|
Del_B.Enabled |
false |
|
|
|
|
|
|
Load_B.Text |
За&грузить |
|
|
Save_B.Text |
Со&хранить |
|
|
Save_B.Enabled |
false |
|
|
|
|
|
|
Calc_B.Text |
Рас&чет |
|
|
Calc_B.Enabled |
false |
|
|
|
|
||
FormatSpisok_L.Text |
Список людей в заданном &формате |
||
Add_TBt.Click |
Add_B_Click |
|
|
|
|
|
|
Change_TBt.Click |
Change_B_Click |
|
|
|
|
|
|
Del_TBt.Click |
Del_B_Click |
|
|
|
|
|
|
Load_TBt.Click |
Load_B_Click |
|
|
|
|
|
|
Save_TBt.Click |
Save_B_Click |
|
|
|
|
|
|
Calc_TBt.Click |
Calc_B_Click |
|
|
|
|
|
|
Add_TSMI.Click |
Add_B_Click |
|
|
|
|
|
|
Change_TSMI.Click |
Change_B_Click |
|
|
|
|
|
|
Del_TSMI.Click |
Del_B_Click |
|
|
|
|
|
|
Load_TSMI.Click |
Load_B_Click |
|
|
|
|
|
|
Save_TSMI.Click |
Save_B_Click |
|
|
|
|
|
|
Calc_TSMI.Click |
Calc_B_Click |
|
|
|
|
|
|
Open_D.DefaultExt |
txt |
|
|
|
|
|
|
Open_D.Filter |
Текстовые |
файлы |
(*.txt)|*.txt|Все |
файлы (*.*)|*.* |
|
||
|
|
||
Open_D.InitialDirectory |
. |
|
|
|
|
|
|
Open_D.Title |
Загрузка списка людей |
|
|
Save_D.DefaultExt |
txt |
|
|
|
|
|
|
Save_D.InitialDirectory |
. |
|
|
|
|
|
|
Save_D.Filter |
Текстовые |
файлы |
(*.txt)|*.txt|Все |
файлы (*.*)|*.* |
|
||
|
|
||
|
|
||
Save_D.Title |
Сохранение списка людей |
Опишем событие SelectedIndexChanged компонента Spisok_LB для
вывода информации в строку состояния и разрешения действий по редактированию и удалению человека:
private void Spisok_LB_SelectedIndexChanged(object sender, EventArgs e)
begin
if (Spisok_LB.SelectedIndex>=0) // Проверка, выбран ли человек
{
/* Получение выбранного человека */ TPeople People = ...;
36
/* Вывод данных человека в панели строки состояния */ FIO_TSSL.Text = People.FIO;
...; /* Разрешение действий по редактированию и удалению */
...;
}
else
{
/* Очистка панелей строки состояния */
...; /* Запрет действий по редактированию и удалению */
...;
}
}
В процедуры:
private void Add_B_Click(object sender, EventArgs e)
private void Change_B_Click(object sender, EventArgs e)
private void Del_B_Click(object sender, EventArgs e)
необходимо внести изменения для обеспечения запрета или разрешения тех или иных действий и работы со строкой состояния (реализация этих операций не приводится и должна быть выполнена самостоятельно).
Также возможной доработкой программы может быть очистка списка FormatSpisok_LB после выполнения операций добавления, изменения, удаления, загрузки, т.к. после этих операций текущий список людей и упорядоченный список людей могут не совпадать.
Внешний вид и пример работы программы показаны на рисунке 7.
Рисунок 7 – Внешний вид и пример работы программы, реализующей комплексное задание
37