Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Программирование в среде Visual C# (Часть 2).pdf
Скачиваний:
164
Добавлен:
27.05.2015
Размер:
1.41 Mб
Скачать

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