
- •Комп'ютерний практикум №1. Введение в Windows Forms
- •Ход работы (первой части лабораторного занятия).
- •Теоретические сведения:
- •Создание Windows-приложений
- •Окно кода программы
- •Роль класса Application
- •Свойства проекта
- •Запуск приложения
- •Что такое форма
- •Windows Forms в технологии .Net
- •Функциональные возможности класса Form
- •Цикл существования объекта Form
- •Резюме.
- •Диалог MessageBox
- •Закрытие формы (Выход из формы)
- •Создание mdi-приложений.
- •Стандартный делегат
- •Теоретические сведения: Иерархия классов. Понятие класса управляющих элементов.
- •Класс Control
- •Элемент управления TextBox
- •Класс Button
- •Элемент управления CheckBox
- •Переключатели и группирующие рамки
- •Элемент управления CheckedListBox
- •Комбинированные списки
- •Управляющий элемент ImageList
- •Элемент управления MonthCalendar
- •Элемент управления Panel
- •Порядок перехода по Tab
- •Форматирование элементов управления
- •Свойства Anchor и Dock
- •Всплывающие подсказки (ToolTips)
- •Создание меню
- •Главное меню.
- •Контекстное меню
- •Создание строки состояния
- •Создание пользовательского диалогового окна.
- •Стандартные диалоговые панели общего назначения.
- •II Задание Expression в таблице, используя визуальные средства разработки.
- •Теоретические сведения:
- •1 Класс DataSet.
- •1.1 Класс DataTable (таблицы)
- •1.1.1 Столбцы (объект Columns).
- •1.1.2 Строки (объект Row)
- •Добавление данных.
- •Заполнение полей.
- •Изменение данных.
- •Состояния строки.
- •Обработка событий
- •Привязка DataTable к некоторым элементам управления.
- •1.1.3 Ограничения (объект Constraints)
- •1.1.4 Представление (объект DataView).
- •1.2 Класс DataRelation (связи между таблицами)
- •2 Просмотр данных. Класс DataGridView.
- •Источники данных (DataSource).
- •2.1.1 Отображение данных из массива
- •2.1.2 Отображение данных из DataTable
- •2.1.3 Отображение данных из DataView
- •Фильтрация на основе состояния строк
- •Сортировка строк
- •2.1.4 Отображение данных из класса DataSet
- •2.1.5 Отображение данных из массива
- •2.2 Привязка данных (DataBinding).
- •Простая привязка.
- •Объекты привязывающие данные (BindingContext)
- •3 Схемы xml.
- •3.1 Пример использования xml-формата для взаимодействия с xml Web-службами:
- •3.2 Ado.Net 2.0 тесно интегрировано с xml.
- •4 Xsd (xml Structure Defenitions) схема.
- •4.1 Описание.
- •4.2 Основные элементы
- •4.3 Использование Visual Studio 2005 .Net
- •4.3.1. Загрузка схем и данных в DataSet
- •4.3.2 Запись схемы и данных из DataSet
- •Основна термінологія, яка використовується при проектуванні форм, панелей екранів. Основні види форм.
- •Основні поняття, що використовуються при проектуванні діалогу.
- •Основна термінологія, що використовується при проектуванні вікон. Визначення вікон, типи вікон.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на дані.
- •Спосіб проектування інтерфейсу користувача з орієнтацією на документи.
- •Вибір моделі інтерфейсу.
- •Розробка вікна.
- •Теоретичні відомості. Проектування полів вибору і вводу інформації: курсор, режим “вкажи і вибери”.
- •Поле вибору: визначення, стан, типи.
- •Поле вибору: представлення об’єктів, ідентифікація поля.
- •Поле вибору: курсор вибору, виділення обраного об’єкту, недоступність об’єкту вибору, черговість розташування, елементи настроювання.
- •Взаємодія користувача з полями вибору, первісні представлення, вхідний стан.
- •Поле введення: визначення, ідентифікація, роздільники, шрифт, правила читабельності.
- •Варіанти вибору повідомлень.
- •Правила складання повідомлень.
- •Теоретичні відомості. Меню дій, спадаюче меню: призначення, розташування, обов’язкові опції, число опцій.
- •Послідовність опцій курсору.
- •Елементи настроювання і виклик опцій.
- •Особливості режимів роботи для одного користувача і багатьох користувачів.
- •Спливаюче меню.
- •Область функціональних клавіш.
- •Теоретичні відомості. Принципи проектування екранів.
- •Вимоги, що пред’являє фірма Microsoft до розробки інтерфейсів.
- •Область команд: розміщення, зміст, використання, правила запиту дії “Команда”.
- •Правила для дій “Витяг команди”, правила для дії “Підказка”.
- •Співвідношення між областю команд і меню дій.
Создание mdi-приложений.
Для создания MDI необходимо:
- чтобы решаемая пользователем задача требовала одновременно несколько открытых документов. Примером задач такого рода является текстовый редактор или, как в приведенном выше примере, программа просмотра документов,
- предусмотреть панели инструментов для наиболее часто выполняемых в приложении операций, таких как изменение стиля шрифта, загрузка и сохранение документов,
- обязательно следует предусмотреть пункт меню Window, который позволял бы пользователю изменять положение открытых окон друг относительно друга (налагая их друг на друга в виде черепицы или каскада) и предоставлял бы ему список всех открытых окон.
Еще одной особенностью MDI-приложений является то, что если имеется некоторое открытое окно и в этом окне существует некоторое меню, то оно должно быть интегрировано в основное меню приложения.
Любое MDI-приложение состоит, по крайней мере, из двух разных окон. Первое окно называется MDI-контейнером, а окно, которое может быть открыто в контейнере, называется дочерним MDI-окном. При упоминании первого окна будут использоваться взаимозаменяемые термины "MDI-контейнер" и "основное окно", а при упоминании второго — термины "дочернее MDI-окно" ИЛИ просто "дочернее окно".
При создании MDI-приложения следует:
1. Создать Windows Application в Visual Studio.
2. Чтобы превратить основное окно приложения из формы в MDI-контейнер, достаточно просто присвоить свойству формы isMdiContainer значение true. При этом произойдет изменение цвета фона, указывающее на то, там не следует размещать видимые управляющие элементы, хотя такая возможность по-прежнему существует и может при определенных обстоятельствах оказаться полезной.
3. Для создания дочернего окна следует добавить в проект новую форму, выбрав Windows Form из диалогового окна, которое открывается при выборе пункта меню Project | Add New Item.
4. Эта форма становится дочерним окном, когда его свойству MdiParent присваивается ссылка на основное окно. Этому свойству нельзя присваивать значение с помощью панели Properties, это необходимо выполнять программным путем.
До того, как появится возможность выводить MDI-приложение на экран в его основном виде, нужно выполнить еще две вещи:
1. Необходимо передать MDI-контейнеру информацию о том, какие окна должны выводиться.
2. Затем вывести их, для чего следует просто создать новый экземпляр формы, которую вы собираетесь выводить, а затем вызвать для нее метод show(). Конструктор формы, предназначенной для вывода в качестве дочернего окна, должен привязаться к родительскому контейнеру. Это достигается за счет присваивания его свойства MdiParent экземпляру MDI-контейнера.
Стандартный делегат
Для большего понимания такого сложного термина приведем простой «жизненный» пример: Дядя Федор и кот Матроскин отправились ловить рыбу. На берегу они расставили свои удочки и решили, что один из них будет следить за клевом, а другой, дабы рационально и с пользой провести это время, либо червей копать, либо просто ОТДЫХАТЬ. Кроме того, конструкции удочек значительно отличались, поэтому было принято решение просто прикрепить инструкции по использованию к каждой из них. Делегатом в таком важном деле был назначен Дядя Федор. Другими словами:
ДЕЛЕГАТ – это представитель, наделенный особыми полномочиями определенными заранее (в нашем случае, «обработать» клюющую рыбу, насадить нового червяка, вообщем, вести процесс рыбалки). В отличие от полномочий - действий делегата, заранее не известно случившееся событие, инициирующее его работу (клюет рыба, сорвалась рыба …). А как именно реагировать при наступлении того самого события, делегату станет известно из предопределенной инструкции.
В любом случае, делегат, настроенный на метод, должен обеспечить реакцию на данное событие.
public delegate void EventHandler(object sender, EventArgs e);
В этом процессе кроме делегата (Дяди Федора) есть также другие участники:
1) событие, произошедшее с удочкой (object sender).
2) инструкция по использованию среагировавшей удочки (EventArgs e).
Инициатор действия - это всегда sender (объект отправитель, источник события), а второй участник (инструкция по использованию удочкой, на которую воздействует sender) – тип, содержащий спецификацию для данного события информацию (предопределённый класс EventHandler, в котором хранится информация о событии). Делегат - установленым образом обрабатывает послание sender-а, согласно инструкции EventArgs.
При создании самого делегата–представителя класса–делегата EventHandler, прежде всего, определяется соответствующий метод, выполнение которого обеспечивает реакцию на событие.
Таким образом, для реализации перехвата события достаточно использовать:
1. для идентификации события. Базовый класс EventArgs, если уведомление о произошедшем событии не связано с генерацией дополнительной информации или производный от данного класса класс, если необходимо передавать дополнительную информацию, связанную с событием,
2. предопределённый класс EventHandler для реализации ссылки на метод–обработчик события.
Комп'ютерний практикум №2. Обзор управляющих элементов и получение навыков работы с ними. Диалоговые окна. OpenFileDialog. SaveFileDialog. OpenFileDialog и SaveFileDialog для SDI-приложений. FontDialog. ColorDialog. Элемент управления NotifyIcon.
Цель: изучение класса Control, основных свойств и методов стандартных элементов управления, изучение класса CommonDialog.
Ход работы (первой части лабораторного занятия).
I. Изучение класса Control
Создайте приложение TestMenuToolboxStatus.
Перетащите элемент управления MenuStrip на форму, что позволит вводить текст меню непосредственно в элементы меню и создайте следующее меню (рис.1).
Рис. 1 Простое меню на форме
При двойном щелчке на пункте меню Visual Studio автоматически сгенерирует оболочку для обработчика события Click и перейдет в окно кода.
Для тестирования меню создайте обработчик пункта меню "Мое действие", который будет сообщать, что выбран именно этот пункт меню.
private void моеДействиеToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Пункт меню");
}
5. Реализуйте следующее: элемент управления TextBox содержит в себе простейшее контекстное меню, дублирующее действия подменю Edit (рис. 2):
Рис. 2. Контекстное меню элемента TextBox
Для этого:
5.1. Перетащите элемент управления contextMenuStrip.
5.2. Создайте пункты Cut, Copy, Paste, SelectAll и обработчики для них:
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
textBox1.Cut();
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Copy();
}
private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.Paste();
}
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox1.SelectAll();
}
5.3. Определите, где будет появляться контекстное меню. Элемент TextBox имеет свойство ContextMenu, где мы укажем Name контекстного меню ( в нашем случае это contextMenu1)
6. Перетащите элемент управления StatusStrip на форму. Откоройте выпадающий список этого объекта на форме и выберите StatusLable:
Рис. 3. Добавляем метку в строку состояния
7. Для отображения информации о пункте меню, на который наведена мышка необходимо:
7.1. В дизайнере
формы выделить пункт, перейти на вкладку
Properties
и открыть окно событий, нажав кнопку
На
данной вкладке необходимо выделить
событие MouseEnter
и в поле ввода сделать двойной щелчок.
7.2. Система сгенерирует код обработчика, который привести к виду:
private void моеДействиеToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
toolStripStatusLabel1 = "Будет выведено сообщение";
}
После компиляции получим следующее:
Рис. 4. Вывод сообщения в строке состояния
7.3. Для изменения текста при потере фокуса мыши на исходный, необходимо воспользоваться событием "MouseLeave", которое генерируется, когда мышь перемещается (покидает) с пункта меню. Обработчик данного события примет следующий вид:
private void моеДействиеToolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "";
}
7.4. Самостоятельно сформировать соответствующие события MouseEnter и MouseLeave для всех подпунктов меню и создать для них обработчики.
8. Подписать всем компонентам на форме ToolTips.
ІІ. UseListAndCombo
Цель: научиться использовать элементы ListBox и ComboBox.
ЗАДАЧА:
Выполните последовательность действий:
- разместите на форме: textBox1, button1, comboBox1;
- реализуйте метод нажатия на кнопку следующим образом:
private void button1_Click(object sender, EventArgs e)
{
comboBox1.Items.Add(textBox1.Text);
}
Это даст возможность добавить в выпадающий список введенное значение в поле ввода.
Самостоятельно: добавить еще две кнопки и listBox1. При нажатии на кнопки реализовать добавление/исключение выбранного значения выпадающего списка в listBox1 (перенос осуществлять с удалением значения из соотв. списка)
Рис. 5.
ІІІ. Изучение диалоговых окон.
Создайте приложение TestDialogs.
На главной форме проекта разместить компонент RichTextBox, полосу главного меню (используя Insert Standard Items), и панель инструментов toolStrip, на которой дублируются пункты меню:
Рис. 6. Пример формы
3. Для работы с файловыми потоками в коде формы blank подключаем пространство имен System.IO:
using System.IO;
Перетащите на форму OpenFileDialog и приведите к виду:
Рис.7. Свойства OpenFileDialog
5. В обработчике события нажатия соответствующего пункта меню прописать:
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "Text format (*.txt)|*.txt|Rich Text (*.rtf)|*.rtf";
if (fd.ShowDialog() == DialogResult.OK)
{
// если выбрали текст
if (fd.FilterIndex == 1)
richTextBox1.LoadFile(fd.FileName, RichTextBoxStreamType.PlainText);
else
richTextBox1.LoadFile(fd.FileName, RichTextBoxStreamType.RichText);
}
В обработчике события для SaveFileDialog:
SaveFileDialog fd = new SaveFileDialog();
fd.Filter = "Text format (*.txt)|*.txt|Rich Text (*.rtf)|*.rtf";
if (fd.ShowDialog() == DialogResult.OK)
{
// если выбрали текст
if (fd.FilterIndex == 1)
richTextBox1.SaveFile(fd.FileName, RichTextBoxStreamType.PlainText);
else
richTextBox1.SaveFile(fd.FileName, RichTextBoxStreamType.RichText);
}
По аналогии создать обработчики диалогов ColorDialog и FontDialog:
ColorDialog d = new ColorDialog();
if (d.ShowDialog() == DialogResult.OK)
{
richTextBox1.SelectionColor = d.Color;
}
FontDialog d = new FontDialog();
if (d.ShowDialog() == DialogResult.OK)
{
richTextBox1.SelectionFont = d.Font;
}
В обработчике события закрытия формы:
private void Form1_FormClosing(object sender,
FormClosingEventArgs e)
{
if ( MessageBox.Show("Вы уверены ?", "Вопрос",
MessageBoxButtons.YesNo
, MessageBoxIcon.Question
, MessageBoxDefaultButton.Button2
)
!= DialogResult.Yes
)
{
e.Cancel = true;
}
}