Основные принципы построения классов
Ю.Е. Алексеев, А.В. Куров
Практикум по программированию на языке C в среде VS C++
Часть 5
Учебное пособие
по дисциплине «Информатика»
Москва
(С) 2015 МГТУ им. Н.Э. БАУМАНА
УДК 681.3.06(075)
Рецензенты к.т.н., доцент Авдеева С.М., к.т.н., доцент Пугачев Е.К.
Алексеев Ю.Е., Куров А.В.
Практикум по программированию на языке C в среде VS C++. Часть 5: Учеб. пособие. –М.: МГТУ им. Н.Э. Баумана, 2015.- с.
В пятой части пособия рассматривается работа непосредственно в среде визуального программирования в режиме Common Language Runtime (CLR) - общеязыковой среде выполнения.
В первой части пособия кратко изложены рсновные понятия и принципы объектно-ориентированного программирования, т.к. создание приложений в визуальной среде основано на использовании библиотеки классов.
Авторы знакомят читателя с порядком создания приложения, основными интрументами, используемыми при разработке программы, правилами создания событий, написанием обработчиков событий, простейшими компонентами интерфейса.
В последующих разделах изложены методические указания по выполнению первых трех лабораторных работ. Рассматривается последовательность действий при создании каждого приложения, излагаются основные сведения об используемых компонентах, приводятся примеры обработчиков событий. В конце каждого раздела приводится комплект заданий для выполнения лабораторной работы (не менее 25 вариантов).
Пособие ориентировано на среду программирования VS C++, соответствует программе курса Информатика и объему часов, отводимых во втором семестре для освоения основ визуального программирования.
Материал пособия авторы используют при проведении практических занятий в МГТУ им. Н.Э. Баумана. Для студентов первого курса машино- и приборостроительных специальностей. Может быть полезно преподавателям как сборник заданий при проведении лабораторных работ.
Рекомендовано НМС МГТУ им.Н.Э. Баумана
Алексеев Юрий Евтихович
Куров Андрей Владимирович
Практикум по программированию на языке C в среде VS C++. Часть 5
Москва
(С) 2015 МГТУ им. Н.Э. БАУМАНА
Оглавление
14. КЛАССЫ.. 5
15. СОЗДАНИЕ ПРОЕКТА.. 16
15.1 Помещение компонент на форму. 18
15.2 Окно сведений об объекте. 19
15.3 Редактор кода. 21
15.4 Основные компоненты визуальной среды программирования. 22
15.5 Лабораторная работа №1. Освоение среды визуального программирования на примере создания приложения для вычисления значения определенного интеграла. 25
15.6 Задания для самостоятельной работы.. 30
15.7 Лабораторная работа N2. Работа с текстовым файлом с использованием многострочного текстового редактора. 32
Многострочный текстовый редактор RichTextBox. 32
Компонент OpenFileDialog. 35
Компонент SaveFileDialog. 36
Компонент главное меню MenuStrip. 37
Окно сообщений MessageBox. 38
Порядок выполнения лабораторной работы. 39
15.8 Задания на обработку текстовых файлов. 46
Общее указание для всех вариантов. 46
Добавляемые подпункты меню Работа1 и Работа2 по вариантам.. 47
15.9 Лабораторная работа N3. Работа с бинарным файлом с использованием таблицы DataGridView 51
Порядок выполнения лабораторной работы. 52
Примеры обработчиков событий. 53
15.10 Задания на обработку бинарных файлов. 58
Общее указание для всех вариантов. 58
Добавляемые подпункты меню Работа1 и Работа2 по вариантам.. 58
Список литературы.. 63
Алфавитный указатель. 63
Вопросы для самопроверки. 64
Заключение. 64
Введение
Данное пособие представляет собой пятую часть пособия, посвященного изложению основ программирования и решения типовых инженерных задач на языке C в среде VS C++. В данной части пособия рассматриваются основы программирования непосредственно в среде визуального программирования. Современные среды программирования предоставляют программисту разнообразные готовые средства создания интерфейса. Студент технического университета должен обладать знаниями и умениями создавать приложения в визуальной среде, использовать возможности, предоставляемые средой.
Среды визуального программирования широко используют технологию объектно-ориентированного программирования, поэтому в первой части пособия авторы знакомят читателя с основными принципами этой технологии. В частности, дается определение класса, приводится пример объявления класса, излагаются основные принципы построения классов (инкапсуляция, наследование и полиморфизм). Поскольку учебный план предусматривает использование в ходе учебных занятий общеязыковой среды выполнения (CLR), то в пособии рассмотрены особенности ее использования. В частности, авторы коротко рассмотрели использование регулируемых указателей и регулируемой кучи, ссылочных классов.
Далее авторы изложили порядок создания приложения в среде визуального программирования. Рассмотрен порядок нанесения компонент на форму, использование основных инструментов – палитры компонентов и окна свойств. Излагаются отличия событийно-ориентированного программирования, используемого в среде визуального программирования, от процедурно-ориентированного, с которым студенты знакомятся в течение первого семестра, создавая консольные приложения. Приводятся сведения о свойствах, методах, событиях основных компонент, которые используются студентами при создании приложений при выполнении лабораторных работ.
Последующий материал представляет собой методические указания по выполнению лабораторных работ, предусмотренных учебным планом. В рамках первой лабораторной работы упор делается на освоение студентами среды визуального программирования, освоению особенностей создания приложений. В связи с этим студенты реализуют алгоритмы численного интегрирования, знакомые им еще с первого семестра. При этом требуется разработать приложение, позволяющее вычислить значение определенного интеграла от заданной функции при задаваемых (вводимых) значениях пределов интегрирования и количестве разбиений тремя методами. Во второй части работы требуется вычислить значение интеграла с заданной точностью и получить количество разбиений для трех используемых методов интегрирования: прямоугольников, трапеций и парабол. Авторы изложили последовательность действий при создании приложения, привели примеры обработчиков событий.
В двух последующих разделах пособия рассматривается создание приложений для обработки текстовых и бинарных файлов. Работа непосредственно с файлами рассматривалась в предыдущей четвертой части пособия, поэтому здесь основное внимание уделено изложению материала, знакомящего читателя с новыми элементами интерфейса. Работа с файлами предусматривает создание меню, содержащего пункты, соответствующие основным операциям, выполняемым с файлами.
Для ввода информации в текстовый файл и отображения содержимого файла предусматривается использование многострочного текстового редактора. При работе с бинарным файлом, содержащим структуры, целесообразно использовать таблицу, ячейки которой содержат поля структур.
Выбор файла при сохранении и загрузке удобно выполнять с использованием стандартных диалогов. Вывод информации, сопровождающей выполнение приложения, выполняется обычно с использованием окна сообщений. Поэтому в соответствие с изложенным авторы рассмотрели работу с перечисленными элементами интерфейса: текстовым редактором RichTextBox, диалогами для выбора файла OpenFileDialog, SaveFileDialog, главным меню MenuStrip, окном для вывода сообщенийMessageBox, таблицей DataGridView. Для этих компонент изложены их основные свойства, методы, события. Авторы привели примеры обработчиков событий, реализующих выполнение основных пунктов меню, а также ряда вспомогательных событий.
Краткое изложение теоретического материала сопровождается достаточным количеством примеров, что должно позволить студенту за ограниченное время познакомиться с новыми для него принципами работы в среде визуального программирования.
Для закрепления изучаемого материала и приобретения необходимого опыта разработки программ авторами предлагаются по каждой теме комплекты индивидуальных заданий, выполнение которых послужит приобретению навыков и умений при решении рассматриваемых задач.
Задания имеют индивидуальный характер, могут использоваться при проведении лабораторных работ, подготовке к рубежным контролям знаний, а также в качестве заданий при проведении контрольных мероприятий.
КЛАССЫ
Классможно рассматривать как тип данных, но в отличие от обычного типа, определяющего набор значений, класс объединяет в себе данные и подпрограммы (функции) обработки этих данных. Класс можно рассматривать как дальнейшее развитие типа данных структура. В классе, как и в структуре, объединяются данные различных типов. Эти данные принято называть полями. Помимо этого, класс содержит функции, которые называют методами. Для объявления класса используется ключевое слово class, за которым следует имя типа (класса), а затем в фигурных скобках следуют объявления типа каждого поля и метода. Объявление завершается точкой с запятой.
class [имя типа (класса)]
{
[спецификатор доступа] тип1 поле1;
[спецификатор доступа] тип2 поле2;
…..
[спецификатор доступа] типN полеN;
[спецификатор доступа] заголовок метода1;
[спецификатор доступа] заголовок метода2;
……
[спецификатор доступа] заголовок методаM;
};
Например, объявление класса точка на плоскости с методами, позволяющими инициализировать поля, являющиеся координатами, и считывать значения этих полей, выглядит следующим образом:
class point
{
public:
float x,y;
void initx(float ix);
void inity(float iy);
float getx();
float gety();
};
Поля класса могут иметь любой тип, кроме типа этого же класса (могут быть указателями или ссылками на этот тип). Они могут объявляться с модификатором const, при этом они инициализируются только один раз и не могут изменяться. Инициализация полей при описании не разрешается.
Поля и методы класса объявляются с использованием спецификаторов доступа private, public, protected. Элементы, описанные после служебного слова private, доступны только внутри этого класса и недоступны вне этого класса. Этот вид доступа принят в классе по умолчанию. Элементы, описанные с использованием спецификатора public, доступны вовне этого класса (в области видимости объекта этого класса) и определяют интерфейс класса. Элементы, описанные в секции protected (защищенный), рассматриваются как открытые в производных классах (рассматриваются дальше в наследовании) и закрытые в остальной части программы.
Секции могут располагаться в произвольном порядке, причем каждая секция может создаваться любое количество раз. Действие очередного спецификатора распространяется до следующего спецификатора или до конца объявления класса. Рекомендуется использовать не более одного раздела каждого вида, группируя данные соответствующего раздела.
Конкретные переменные типа класс называют экземплярами класса, или объектами. Время жизни и видимость объектов зависят от вида и места их описания и подчиняются общим правилам языка.
Каждый объект получает уникальный набор полей, но общий для всех объектов класса набор методов. Поскольку данные (поля) и методы инкапсулированы в одном обекте, то все данные (поля) глобальны по отношению к любым его методам и могут использоваться с указанием простого имени. При этом формальные параметры методов совпадать с именами полей не должны.
Функции-члены класса имеют доступ ко всем членам класса, объявленным в классе. Функции-члены класса могут вызывать друг друга напрямую. Это становится возможным благодаря наличию специального параметра this, который хранит адрес области памяти переменной типа класс и неявно передается методам при вызове.
Методы класса могут размещаться внутри описания класса. Однако при создании сложных классов методы выносятся за пределы кдасса. При этом заголовок метода (прототип) указывается внутри класса. Для определения функции – члена класса вне класса используется оператор разрешения области видимости :: (два двоеточия). При этом перед кодом метода указывается имя класса, которому он принадлежат.
Программа 1. Программа, демонстрирующая работу с классом точка
class point
{
public:
float x,y;
void initx(float ix);
void inity(float iy);
float getx();
float gety();
};
int _tmain(int argc, _TCHAR* argv[])
{
point p1;
p1.initx(5.5);
p1.inity(-2.2);
printf("x=%5.1f y=%5.1f",p1.getx(),p1.gety());
getch();
return 0;
}
void point::initx(float ix)
{ x=ix; }
void point::inity(float iy)
{ y=iy; }
float point::getx()
{ return x; }
float point::gety()
{ return y; }
Классы могут быть глобальными (объявляются вне какого-либо блока) и локальными (объявляются внутри функции или другого класса).
В состав любого класса входят специальные методы – конструктори деструктор, которые объявляются в классе или наследуются от базового класса. Конструктор используется для создания объекта (выделения памяти под него), деструктор предназначен для освобождения памяти. Конструктор вызывается каждый раз, когда создается объект: при объявлении экземпляра переменной автоматически вызывается конструктор для создания экземпляра. Если конструктор явно не определен, то вызывается конструктор по умолчанию без параметров. Конструктор определяет необходимый размер памяти под размещение объекта в динамической памяти, осуществляет выделение памяти и распределение объекта в памяти, помещает адрес этой памяти в экземпляр – переменную типа класса. Деструктор освобождает динамическую память и разрушает объект.
Класс может иметь несколько конструкторов для разной инициализации данных членов.
Существует ряд правил объявления конструктора и деструктоа. Имена конструктора и деструктора должны совпадать с именем класса, перед именем деструктора ставится знак тильда ~. Конструктор и деструктор не имеют типа возвращаемого результата. Если не указывается ни одного конструктора, то он создается компилятором автоматически. Конструкторы используются в основном для инициализации полей.
Доступ к полям и методам объекта, объявленным со спецификатором public, извне класса выполняется с использованием операции прямого выбора (используется точка), например, p.x= 9.7; p.y=-3.4; p.getx(); Однако такой способ нежелателен. К закрытым полям доступ осуществляется с помощью вызова соответствующих методов.
СОЗДАНИЕ ПРОЕКТА
Для создания нового приложения в среде визуального программирования надо выполнить команду File| New|Project. В этом случае открывается диалоговое окно для выбора приложения, далее необходимо выполнить следующие действия, помеченные цифрами.
Рис.1 Диалоговое окно для выбора типа приложения
1. Выбор типа проекта (CLR) 2. Выбор типа
приложения
3. Ввод имени проекта 4. Ввод (выбор) имени папки, в которой 5. Щелчок на
размещается проект кнопке OK
После выполнения этих действий на рабочем столе появится объект, называемый формой.
При создании приложения работа ведется с использованием нескольких окон. Одним из них является окно свойств формы (Properties). Для его вызова следует открыть контекстное меню формы (поместить курсор мыши на форму и щелкнуть правой кнопкой) и выполнить в нем команду Properties. Вторым окном является окно палитры компонентов(Toolbox). Для вызова этого окна следует выбрать пункт меню View, а затем в раскрывшемся списке выбрать пункт Toolbox. Третьим важным окном является окно редактора кода, в котором будут размещаться прежде всего программы-обработчики событий компонентов, размещаемых на форме. Чтобы сделать видимым это окно, надо вызвать контекстное меню формы и выполнить в нем команду View Code (показать код). Тот же результат можно получить, если выполнить команду главного меню View| Code.
При создании формы в верхней части окна проектирования появляется вкладка Form1.h (Design), а при вызове редактора кода – вкладка Form1.h.
Окно приложения приведено на рис.2.
Вкладка редактора кода Form1.h
Вкладка создания формы Form1.h (Design)
Окно палитры
Окно сведений компонентов
Окно формы об объекте
Рис. 2 Вид главного окна для создания приложения
Работа по созданию приложения сводится к помещению на форму необходимых компонент, инициализации событий и написанию обработчиков этих событий.
В процессе нанесения компонент на форму может потребоваться изменение размеров формы, что можно сделать протяжкой формы, ухватившись мышью за анкерные точки – маленькие квадратики, выделенные по углам и сторонам формы.
Окно сведений об объекте
Окно сведений (свойств) об объекте изображено на рис.3. Любой объект, находящийся на рабочем столе, обладает определенным набором свойств, например, именем, видимостью, координатами расположения на форме, размерами и т.д. Все свойства активного (выделенного объекта, т.е. на котором произведен щелчок мышью) объекта отображаются в окне с названием Properties (свойства). Это окно становится видимым при выполнении команды контекстного меню Properties. В окне имеется пять вкладок:
- первая вкладка упорядочивает содержимое окна по категориям информации;
- вторая вкладка упорядочивает содержимое окна по алфавиту:
- третья вкладка показывает перечень свойств:
- четвертая вкладка показывает перечень событий, связанных с объектом:
- пятая вкладка выводит на экран страницы свойств.
Наиболее часто изменяемые свойства – название объекта (Name), текст надписи, выводимый на объекте (Text), видимость (Visible).
Вкладка Events (события) содержит список возможных событий, которые могут происходить с компонентом. Она позволяет связывать каждое событие с программой-обработчиком этого события: при двойном щелчке мышью на окне с кнопкой рядом с именем события среда программирования создает в модуле формы, в которую помещен компонент, программу - обработчик этого события. Программа-обработчик представляет собой функцию с заголовком, но с пустым телом (заготовка или шаблон). Дальнейший процесс программирования будет состоять в том, что программист должен в пустое тело шаблона записать необходимые операторы (команды), которые будут определять реакцию компонента на данное событие с учетом передаваемых функции фактических значений ее параметров. Например, вид пустого обработчика события OnClick (щелчок на кнопке) кнопки Button5 следующий:
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) { }
упорядочение содержимого упорядочение содержимого окна по алфавиту
окна по категориям информации
показ перечня свойств (текущий режим)-
выпадающий список с именами всех
компонент формы
вывод на экран страниц свойств
показ перечня событий, связанных
с объектом
Рис.3 Окно сведений об объекте
При создании обработчика события происходит автоматическое переключение системы на вызов редактора кода, который установит курсор на начало обработчика, чтобы программист смог вводить операторы программы. Создать событие (выбрать события, на которые программа должна реагировать) для кнопки можно и иным способом – двойным щелчком на ней.
В верхней части окна расположена кнопка раскрывающегося (выпадающего) списка (с треугольной стрелкой). В этом списке находятся имена всех компонентов, помещенных на форму, а также имя активной в данный момент формы. С помощью этого списка можно выбирать любой компонент, помещенный на форму, и работать с ним. Для этого надо щелкнуть мышью на имени нужного компонента, который станет после этого активным, а в окне Properties появятся сведения об этом компоненте.
Редактор кода
При создании новой формы синхронно создается программный модуль с именем формы и расширением h. В этом модуле находится описание формы и обработчики событий компонентов, нанесенных на форму. Попасть в редактор кода из окна формы можно нажатием комбинации клавиш <Ctrl>+<Alt>+<0> или выполнив команду меню View Cod. Форма (как программный объект) является классом-наследником класса Form. В нее попадают в силу наследования все члены класса Form, а также впоследствии попадают компоненты, которые добавляются на форму. Первая форма получает имя Form1. При программировании обращение к членам класса производится через указатель на экземпляр этого класса, т.е. через указатель this. Этот указатель содержит ссылку на текущий объект. Например, если надо обратиться к свойству Text компонента textBox4 (однострочный редактор - поле ввода-вывода), то обращение будет выглядеть следующим образом this->textBox4->Text (указатель this хранит адрес объекта textBox4). Имена экземпляров компонентов формируются как указатели на экземпляры.
При наборе кода следует использовать такой удобный инструмент, как подсказчик, который выдает оперативную информацию при наборе кода. Напрмер, после набора this открывается окно со всеми членами объекта Form1, в котором следует выбрать нужный член.
В процессе создания проекта необходимо сохранять все файлы этого проекта. Для этого следует использовать команду Save All (подменю пункта главного меню File). Среда создает следующие файлы проекта:
· Solname.sin – файл относится к категории группы проектов, объединенных в одно решение, он организует все элементы проекта в одно общее решение;
· Projname.suo – файл опций решения, хранит все пользовательские режимы, задаваемые при создании решения;
· Projname.vcproj – файл хранит специфическую информацию проекта (файл создается для каждого из проектов общего решения);
· Projname.idl - файл содержит код описания интерфейса для управления библиотекой типов (используется для генерации такой библиотеки), библиотека предоставляет интерфейс компонента другим клиентам;
· Projname.ncb – некомпилируемый файл, содержит информацию, генерируемую синтаксическим анализатором, используется классом View (просмотр информации), при удалении автоматически регенерируется;
· Projname.txt – файл содержит описание некоторых файлов созданного проекта.
Среда разработки создает также файлы предварительной компиляции проекта Stdafx.h и Stdafx.cpp, они используются для создания предварительно компилируемого заголовочного файла Projname.pch и объектного файла Stdafx.obj.
В заключение дадим информацию о ресурсных файлах, которые представляют собой элементы интерфейса, обеспечивающие пользователя информацией (к ним относятся графические битовые изображения, пиктограммы, линейки инструментов, курсоры и т.д.):
· Projname.rc – файл содержит информацию, зависящую от типа проекта, например, это могут быть линейки инструментов, меню по умолчанию, таблицы строк, диалоговые окна по умолчанию, файл пиктограмм, информация о версиях проекта, битовые изображения;
· Resource.h – файл содержит определения ресурсов, используемых в проекте;
· Projname.rc2 – файл содержит дополнительные ресурсы, используемые в проекте;
· Projname.def – файл содержит имя и описание компонента, размер занимаемой им памяти во время выполнения проекта;
· Projname.ico – файл пиктограммы для проекта или компонента;
· Toolbar.bmp – графический файл, представляющий приложение или компонент на линейке инструментов или в палитре компонентов.
Компонент OpenFileDialog
Компонент находится в списке Dialogs палитры компонентов, предназначен для выбора файлов с помощью стандартного окна Windows для выбора и открытия файлов. Для высвечивания диалогового окна необходимо использовать метод ShowDialog(). Основные свойства компонента:
Multiselect – при установке значения true можно выбирать группу файлов;
ShowReadOnly – для файлов типа”только для чтения” появляется галочка рядом с названием файла;
Filter – задает условие фильтрации файлов (позволяет выбирать только те файлы, которые указаны в фильтре).
Компонент является невизуальным, он размещается не на форме, а помещается на специальную полосу, расположенную в нижней части окна дизайнера формы.
Диалоговое окно для выбора файла появляется при выполнении метода ShowDialog(). Когда пользователь в появившемся окне нажимает на кнопку Открыть (Open), данный метод возвращает значение DialogResult, которое надо сравнить со значением OK. Это означает, что если возвращаемое значение также равно OK, то метод сработал без ошибок, и окно открылось. При нажатии в окне на кнопку Открыть, окно закроется, а имя выбранного файла будет присвоено свойству компонента FileName, после чего его можно использовать в приложении при работе с файлом.
С помощью свойства Filter можно задать фильтр для выборки файлов. Если объявлена переменная OpenFileDialog^ openFile1 = gcnew OpenFileDialog;, то с помощью оператора присваивания openFile1->Filter = "RTF Files|*.rtf"; задается конкретное значение фильтра (в данном случае выведется в окне информация обо всех RTF файлах). Как видно из примера, значение фильтра задается в виде строки, в которой сначала описывается фильтр, затем ставится вертикальная черта, после которой указывается шаблон файлов.
Свойство DefaultExt позволяет установить расширение файла по умолчанию, например, openFile1->DefaultExt = "txt";
Компонент SaveFileDialog
Компонент находится в списке Dialogs палитры компонентов, предназначен для сохранения файла в нужном месте файловой структуры так, как это делается в Windows. Файл сам по себе не сохраняется, компонент дает только путь к месту расположения файла. Программист сам должен написать соответствующий участок кода программы для сохранения файла. Для открытия диалогового окна используется метод ShowDialog(). Компонент является невизуальным, размещается не на форме, а на специальной полосе ниже формы. Основные свойства у этого компонента совпадают со свойствами компонента OpenFileDialog.
Следует отметить свойство OverwritePrompt, которое вызывает появление диалогового окна Save As, для этого свойство должно быть установлено в true.
Когда пользователь выбирает имя файла и нажимает на кнопку Save в диалоговом окне, метод ShowDialog() заносит в свойство FileName имя файла и путь к нему. Никакой записи файла при этом не происходит, поэтому необходимо применять методы сохранения файлов.
Окно сообщений MessageBox
Окно сообщения — это готовое модальное диалоговое окно, которое отображает пользователю текстовое сообщение. Окно сообщения демонстрируется при вызове статического метода Show класса MessageBox. Отображаемое текстовое сообщение — строковый аргумент, который можно передать методу Show. Несколько перегруженных версий метода Show также позволяют вам указать заголовок.
Чтобы позволить пользователю закрыть окно сообщения, метод Show отображает окно сообщения с кнопками ОК и Закрыть в заголовке.
Также можно с помощью окна сообщений задать пользователю вопрос. Пользователь отвечает нажатием одной из нескольких кнопок, указанных для отображения с помощью перечисления MessageBoxButton. Это перечисление можно передать нескольким перегруженным версиям метода Show. Значением по умолчанию для перечисления MessageBoxButton является OK.
Можно определить, какую кнопку нажмет пользователь, проанализировав значение, возвращенное методом Show. Возвращаемое значение — это значение перечисления MessageBoxResult, в котором каждое значение равно одной из кнопок, которые может отобразить окно сообщения. Значение по умолчанию для окна сообщения — OK, так как ОК в окне сообщения — кнопка по умолчанию. Однако некоторые перегруженные версии метода Show позволяют указать другое значение по умолчанию MessageBoxResult.
У окон сообщений всегда есть окно-владелец. По умолчанию владелец окна сообщения — это текущее активное окно в приложении в тот момент, когда окно сообщения открылось Однако можно указать другого владельца для окна Window, воспользовавшись одним из нескольких перегруженных версий Show. Дополнительные сведения об окнах-владельцах см. в разделе Window..::.Owner.
В этом примере демонстрируются способы отображения окна сообщения и получения возвращаемого значения.
Окно сообщения отображается путем вызова метода Show, который имеет несколько перегрузок, позволяющих настраивать вид и поведение окна сообщения, в том числе следующие его свойства:
· Сообщение.
· Заголовок окна.
· Значок.
· Кнопки.
· Окно-владелец.
· Специальные параметры, например, поддержка чтения справа налево.
Задания на обработку текстовых файлов
Общее указание для всех вариантов
1. Создать в визуальной среде программирование приложение для обработки текстовых файлов. Для ввода и отображения информации использовать текстовый редактор. Для выбора файлов при загрузке содержимого файлов и сохранения информации в файле использовать диалоги. Приложение должно иметь меню, реализующее работу с файлами и имеющее следующие подпункты: Создать, Открыть, Сохранить как, Работа1, Работа 2, Очистить, Выход.
2. Исходный (создаваемый с использованием меню Файл) файл должен иметь следующую структуру строк (в скобках указаны длины полей и выравнивание): номер студента (4, правое), пробелы (2), номер группы (8, левое), пробелы (2), фамилия (12, левое), оценка 1 (3, правое), оценка 2 (3, правое), оценка 3 (3, правое),
например,
3. Исходный файл должен храниться в каталоге проекта программы и иметь данные не менее чем по трём группам, для каждой из которых должно быть число строк, достаточное для проверки работ по подпунктам меню Работа. Ширина текстового редактора должна быть больше ширины строки с информацией о студенте и с вертикальной полосой прокрутки (в окне свойств свойству ScrollBars дать значение Vertical при создании макета формы).
4. Если в задании какие-либо данные отсутствуют или сказано, что они должны быть введены, то предполагается использование однострочного текстового редактора TextBox.
5. В некоторых заданиях предлагается отбирать строки файлов по маске. Маской является строка, содержащая символы замещения:
* (звёздочка) – представляет любую, в том числе и пустую, последовательность символов; ? (знак вопроса) – представляет любой один, и только один символ. Например, маске *т? удовлетворяет любая последовательность символов, предпоследним символом которой является буква «т», после которого должен стоять ровно один любой символ. Такой маске будут, в частности, соответствовать слова та, эта, приметы, но не такт, этак, приметный.
Добавляемые подпункты меню Работа1 и Работа2 по вариантам
1. Отличники…– для выбранного файла отобразить список фамилий студентов задаваемой группы, имеющих все оценки 5.
Средние баллы – для выбранного файла отобразить средние баллы по каждому экзамену для студентов всех групп.
2. Средний балл группы…– для выбранного файла отобразить для задаваемой группы средний балл по всем экзаменам.
Должники– отобразить строки файла, представляющие студентов всех групп, в фамилии которых содержится задаваемая строка и имеющих хотя бы одну оценку 2 ( Если заданная строка пустая (сделать так по умолчанию), то отобразить все строки, в которых есть оценки 2.
3. Неуды по экзаменам…– для выбранного в диалоге файла, задаваемых группы и номера экзамена (1, 2 или 3) отобразить количество оценок 2.
Хорошисты– отобразить строки файла, представляющие студентов всех групп, имеющих оценки, большие 3.
4. Разбить по группам– по данным файла, содержащим сведения по студентам разных групп, создать новые текстовые файлы с именами '<имя группы>.txt', включающими все строки файла-источника с соответствующими именами групп. Массивы не использовать.
Отстающие– отобразить строки файла, представляющие студентов всех групп, имеющих две и более оценки 2.
5. Список групп…– по данным файла, содержащим сведения по студентам разных групп, создать новый текстовый файл с именами групп и отобразить его содержимое в окне редактора текста (массивы не использовать).
Выбор по фамилии…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, заданную пользователем.
6. Объединение групп…– по данным из двух файлов текущего каталога, заданным пользователем в диалоге, создать третий текстовый файл с именем, являющимся склейкой через пробел имен файлов-источников.
Выбор по части фамилии…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, включающую строку, заданную пользователем в диалоге.
7. Добавление строки…– в упорядоченный по фамилиям файл (исходный файл задать упорядоченным), заданный пользователем в диалоге, добавить новую строку, заданную в окне редактора текста, сохранив упорядоченность по фамилиям (использовать второй файл).
Выбор по началу фамилии…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, начинающуюся со строки, заданной пользователем в диалоге.
8. Сортировка…– упорядочить строки файла по фамилиям методом пузырька, переписав их сначала в массив, и сохранить в том же файле.
Выбор по маске…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с одним символом замещения *(звёздочка), заданной пользователем.
9. Выбор по окончанию фамилии…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, заканчивающуюся строкой, заданной пользователем.
Выбор Nлучших…–загрузить в окно редактора Nстрок файла, представляющих студентов всех групп, имеющих наибольшие суммы баллов.
10. - Сортировка по среднему баллу…– при чтении строк файла вычислить средний балл каждого студента и добавить его к строке, занести полученные строки в массив и упорядочить по убыванию среднего балла, а затем сохранить упорядоченный таким образом текст в том же файле.
Поиск двоечников…– загрузить в окно редактора строки файла, представляющие студентов заданной пользователем группы, имеющих неудовлетворительные оценки.
11. Сортировка…–строки файла загрузить в массив, упорядочить по фамилиям методом поиска минимального элемента и сохранить в том же файле.
Выбор по маске…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, не соответствующую маске с одним символом замещения *(звёздочка), заданной пользователем.
12. Сортировка …– строки файла загрузить в массив, отсортировать по номерам студентов методом пузырька и сохранить в том же файле.
Выбор по маске…– загрузить в окно редактора строки файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с не более, чем одним символом замещения ? (знак вопроса), заданной