- •1. Вводная часть
- •2. Знакомство со средой разработки на примере создания простого консольного приложения
- •3. Модификация консольного приложения
- •4. Публикация
- •5. О приложении к Лабораторной работе № 1
- •Лабораторная работа № 2: Создание простого приложения Windows Forms
- •Создание простого приложения Windows Forms
- •Модификация приложения Windows Forms
- •Завершающая часть
- •2. Создание простого приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Завершающая часть
- •5. О приложении к Лабораторной работе № 2
- •3. Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления
- •Вводная часть
- •О приложении к Лабораторной работе № 3
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: элемент управления MenuStrip
- •5. Модификация приложения Windows Forms: элемент управления Button
- •6. Модификация приложения Windows Forms: элемент управления ToolTip
- •7. Модификация приложения Windows Forms: элемент управления ComboBox
- •8. Модификация приложения Windows Forms: элемент управления WebBrowser
- •9. Модификация приложения Windows Forms: добавляем исходный код
- •10. Завершающая часть
- •11. О приложение к Лабораторной работе № 3
- •4. Лабораторная работа № 4: Windows Forms — работа с формами Лабораторная работа № 4: Windows Forms — работа с формами
- •Вводная часть
- •О приложении к Лабораторной работе № 4
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: добавление новой формы
- •5. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через прямой доступ к элементу формы
- •6. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через передачу метода в конструктор формы
- •7. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через класс делегата
- •8. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через свойства
- •9. Завершающая часть
- •10. О приложении к Лабораторной работе № 4
- •5. Лабораторная работа № 5: Windows Forms — элементы управления Лабораторная работа № 5: Windows Forms — элементы управления
- •Вводная часть
- •О приложении к Лабораторной работе № 5
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: динамическое добавление и уничтожение элемента управления
- •5. Модификация приложения Windows Forms: стандартные диалоговые окна
- •6. Модификация приложения Windows Forms: открытие файла, сохранение файла и работа с текстом
- •7. Модификация приложения Windows Forms: прочее
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 5
- •Лабораторная работа № 6: SolidWorks — работа с SolidWorks
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: eDrawings 2012
- •4. Модификация приложения Windows Forms: организация работы с SolidWorks через приложение
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 6
- •Лабораторная работа № 7: SolidWorks — использование SwCSharpAddin, работа с макросом и шаблоном детали
- •2. Создание приложения SwCSharpAddin
- •3. Модификация приложения SwCSharpAddin: макрос отрисовки болта
- •4. Модификация приложения SwCSharpAddin: построение через шаблон детали
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 7
- •8. Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation
- •Вводная часть
- •О приложении к Лабораторной работе № 8
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: добавление нового элемента из библиотеки компонентов wpf
- •5. Модификация приложения Windows Forms: расширение функциональности приложения и работа с оформление
- •6. Модификация приложения Windows Foundation Presentation: различные возможности wpf
- •7. Модификация приложения Windows Foundation Presentation: немного о стилях и шаблонах
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 8
- •Лабораторная работа № 9: Создание приложения-презентации Windows Foundation Presentation
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: работа с решением в Expression Blend
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 9
- •Лабораторная работа № 10: Работа с базами данных — xml и ole
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: odbc
- •4. Модификация приложения Windows Forms: ole
- •5. Модификация приложения Windows Forms: xml
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 10
- •Лабораторная работа № 11: Динамическая связь приложений через библиотеку классов
- •2. Удалённый объект: создание библиотеки классов удалённого объекта
- •3. Клиент: создание приложения Windows Forms
- •4. Сервер: создание консольного приложения
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 11
- •Лабораторная работа № 12: Автоматизация Microsoft Office Word
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Word
- •4. Модификация приложения Windows Forms: работа с шаблонами
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 12
- •Лабораторная работа № 13: Автоматизация Microsoft Office Excel
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Excel
- •4. Модификация приложения Windows Forms: чтение данных с документа Microsoft Excel
- •5. Модификация приложения Windows Forms: прочие возможности Microsoft Excel
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 13
- •Лабораторная работа № 14: Простой растровый редактор
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора
- •4. Модификация приложения Windows Forms: функциональность растрового редактора
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 14
- •15. Лабораторная работа № 15: Векторный редактор изображений Лабораторная работа № 15: Векторный редактор изображений
- •Вводная часть
- •О приложении к Лабораторной работе № 15
- •1. Вводная часть
- •2. Создание решения, приложения Windows Forms и библиотеки классов
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора и добавление файлов ресурсов
- •4. О будущей функциональности векторного редактора изображений
- •5. Модификация приложения Windows Forms: подготовка библиотеки классов
- •6. Модификация приложения Windows Forms: функциональность векторного редактора
- •7. Завершающая часть
- •8. О приложении к Лабораторной работе № 15
- •Лабораторная работа № 16: Windows Communication Foundation
- •2. Создание приложения wcf:
- •3. Модификация приложения wcf: приложение-клиент для wcf-службы
- •4. Создание приложения Windows Forms: сервер чата на wcf
- •5. Создание приложения Windows Forms: клиент чата на wcf
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 16
- •Лабораторная работа № 17: Знакомство с Silverlight
- •2. Создание приложения Silverlight:
- •3. Модификация приложения Silverlight: первые шаги и полноэкранный режим
- •4. Модификация приложения Silverlight: простой проигрыватель mp3-файлов
- •5. Модификация приложения Silverlight: работа с анимацией
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 17
- •Лабораторная работа № 18: Знакомство с asp.Net
- •2. Создание веб-приложения asp.Net
- •3. Модификация веб-приложения asp.Net: реализация различной функциональности
- •4. Модификация веб-приложения asp.Net: ajax
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 18
- •Вводная часть
- •О приложении к Лабораторной работе № 19
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса и добавление TabControl
- •4. Модификация приложения Windows Forms: вкладка «Просто фон!»
- •5. Модификация приложения Windows Forms: вкладка «Объекты и градиент»
- •6. Модификация приложения Windows Forms: вкладка «Мой монитор сломался!»
- •7. Модификация приложения Windows Forms: вкладка «Векторные часы»
- •8. Модификация приложения Windows Forms: вкладка «Огонь!!!»
- •9. Модификация приложения Windows Forms: вкладка «Дождик»
- •10. Завершающая часть
- •11. О приложении к Лабораторной работе № 19
- •Лабораторная работа № 20: Inventor — работа с Inventor
- •Вводная часть
- •О приложении к Лабораторной работе № 20
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: запуск и завершение приложения Inventor
- •4. Модификация приложения Windows Forms: создание новых документов
- •5. Модификация приложения Windows Forms: доступ к элементам документов Inventor
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 20
- •Лабораторная работа № 21: Знакомство с языком f# (Эф-шарп) на примере простого приложения для командной строки
- •Вводная часть
- •О приложении к Лабораторной работе № 21
- •1. Вводная часть
- •2. Основные положения при работе с f#
- •3. Создание приложения «Учебник по f#»
- •4. Создание консольного приложения
- •5. О приложении к Лабораторной работе № 21
- •Лабораторная работа № 22: Различные примеры на f#
- •2. Создание приложения «Приложение f#»
- •3. Модификация приложения f#: match
- •4. Модификация приложения f#: создание форм и рисование объектов на форме
- •5. Модификация приложения f#: работа с базой данных Microsoft Access
- •6. О приложении к Лабораторной работе № 22
- •23. Дополнительная лабораторная работа № 1
- •24. Дополнительная лабораторная работа № 2
- •25. Дополнительная лабораторная работа № 3
- •Вводная часть
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation: добавление ресурсов
- •4. Модификация приложения Windows Foundation Presentation: добавление исходного кода
- •5. Модификация приложения Windows Foundation Presentation: оформление элемента ListBox
- •6. Завершающая часть
- •7. О приложении к данной работе
7. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через класс делегата
По аналогии с пунктом под номер 6 данной лабораторной работы создаём третью форму. Элементы расставляем также.
Создаём новую форму LWP04ChildrenDelegate1 со следующими элементами:
Рис. 7. 1. Расстановка элементов на добавленной форме LWP04ChildrenDelegate1
Параметры формы LWP04ChildrenDelegate1 таковы:
(Name): |
LWP04ChildrenDelegate1 |
Text: |
Работа с окнами (C#) :: Подчинённая форма для делегата № 2 |
Size: |
500; 100 |
FormBorderStyle: |
Fixed Dialog |
MaximizeBox: |
False |
MinimizeBox: |
False |
ShowInTaskbar: |
False |
Параметры добавленного текстового поля редактирования таковы:
(Name): |
TextBoxChildrenDelegate2 |
Событие TextChanged текстового поля редактирования TextBoxChildrenDelegate2:
private void TextBoxChildrenDelegate2_TextChanged(object sender, EventArgs e)
{
Text2 = TextBoxChildrenDelegate1.Text; // Присваиваем переменной обратной передачи значение текстового поля
}
Параметры добавленной кнопки Закрыть:
(Name): |
ButtonClose |
Text: |
Закрыть |
Size: |
75; 23 |
Событие Click кнопки ButtonClose:
private void ButtonClose_Click(object sender, EventArgs e)
{
Close();
}
Также, добавим ещё одну кнопку для формы LWP04Main:
Рис. 7. 2. Расстановка элементов на добавленной форме LWP04Main: кнопка Для делегата № 2
Параметры добавленной кнопки таковы:
(Name): |
ButtonShowChildrenDelegate2 |
Text: |
Для делегата № 2 |
Size: |
150; 23 |
ToolTip на Hint: |
Передача параметра через класс делегата |
Событие Click кнопки ButtonShowChildrenDelegate2:
/* Создаём экземпляр класса формы LWP04ChildrenDelegate2, вызываем конструктор
* Вместе с формой создаём экземпляр делегата с вызовом метода TextBoxNewDelegate2() */
LWP04ChildrenDelegate2 D2 = new LWP04ChildrenDelegate2(new NewDelegate2In(TextBoxNewDelegate2));
D2.ShowDialog(); // Вызываем модальный диалог нашей формы
Это событие на кнопке аналогично тому, что уже было использовано. Мы совместим возможности показанные в пункте № 6 с новой функциональностью.
В этом же файле (LWP04Main.cs) добавляем следующее (новая функция void, и копия метода и пункта №6):
void TextBoxNewDelegate2Out(String Text)
{
/* Основной обработчик передачи параметра, вызывается всякий раз когда происходит событий обновления текста поле дочерней формы
* Вызывает MessageBox.Show с главной формы, что важно, сообщая параметр с дочерней формы */
MessageBox.Show("Текст который был введён в форме:\n\n" + Text, D2.Text + " :: Результат выполнения");
TextBoxMain.Text = Text; // Отправляем полученную переменную в поле TextBoxMan (выполняется динамически)
}
string TextBoxNewDelegate2()
{
// Метод возвращает значение TextBoxMain, нужен для работы делегата
return TextBoxMain.Text;
}
Основной метод главной формы отредактируем так (ВАЖНО, чтобы весь код находился после строчки (InitializeComponent();), так как здесь должен сработать сначала конструктор, а затем всё остальное.
public LWP04Main()
{
InitializeComponent();
NewDelegate2Out.EventHandler = new NewDelegate2Out.NewEventOut(TextBoxNewDelegate2Out);
}
Ключевым же является метод дочерней формы для текстового поля редактирования. Событие TextChanged текстового поля редактирования TextBoxChildrenDelegate2:
// Метод отлавливающий изменения текстового поля является здесь основным
private void TextBoxChildrenDelegate2_TextChanged(object sender, EventArgs e)
{
/* Срабатывает делегат NewDelegate2Out при получения события изменений текста этого поля
* и в метод (на главную форму) отправляется значение этого поля
* То есть изменение текста приводит к ВЫЗОВУ события EventHandler и отправку через делегат данных текстового поля */
NewDelegate2Out.EventHandler(TextBoxChildrenDelegate2.Text);
}
Сам класс делегата в файле Program.cs реализован так:
/* Создаём делегата № 2 */
public static class NewDelegate2Out
{
public delegate void NewEventOut(String Data);
public static NewEventOut EventHandler;
}
// Делаем по аналогии
public delegate string NewDelegate2In();
Последний способ достаточно сложен для понимания. В основе лежит инициализация EventHandler. Он представляет метод, который будет обрабатывать событие, не имеющее данных. Поэтому, он «ловит» событие изменение текса, узнаёт кто (какой элемент) проинициализировал это событие и вытаскивает текст в текстовом поле редактирования дочерней формы. Итак, что же такое делегаты?
В платформе .NET Framework в основе модели события лежит существование делегата события, связывающего событие с его обработчиком. Для вызова события требуются два элемента:
делегат, который идентифицирует метод, вызываемый в ответ на событие (делегат был создан);
класс, в котором хранятся данные события (мы организовывали в как раз таки класс).
Делегат — это тип, который определяет сигнатуру, иными словами тип возвращаемого значения, и тип списка параметров метода. Тип делегата можно использовать для объявления переменной, которая может ссылаться на любой метод с той же сигнатурой, что и у делегата.
В стандартной сигнатуре делегата обработчика событий определяется не возвращающий значение метод, первый параметр которого относится к типу Object и ссылается на экземпляр, который инициировал событие, а второй параметр является производным от типа EventArgs и содержит данные события. Если событие не создает данных, второй параметр просто является экземпляром класса EventArgs. В противном случае, второй параметр является пользовательским типом, производным от EventArgs, и предоставляет всевозможные поля и свойства, необходимые для хранения данных события (что мы и получили, считав текст с поля).
EventHandler является предопределённым делегатом, представляющим метод обработчика событий для события, не генерирующего данные. Если событие не генерирует данные, необходимо предоставить собственный пользовательский тип данных события и либо создать делегат, в котором типом второго параметра является этот пользовательский тип, либо использовать универсальный класс делегата EventHandler(Of TEventArgs) и подставлять свой пользовательский тип в параметр универсального типа. Чтобы связать событие с методом, который будет обрабатывать событие, и добавить в событие экземпляр делегата. Обработчик событий вызывается при каждом происхождении этого события, пока делегат не будет удален.
Именно событийная модель делает делегаты мощным инструментом (что можно было увидеть при выполнении данной лабораторной работы).
Немного об объявлении делегата в общем виде: объявление создания делегата происходит так:
delegate void MyDelegate();
Сначала идёт ключевое слово, затем возвращаем тип метода (void), и потом имя делегата. В нашем случае, делегат не возвращает зачения и не получает параметров, то есть это относится к любому методу этого делегата.
Используя конструктор, создаём новый объект нашего типа-делегата:
MyDelegate NewDelegate = new MyDelegate(MyMethod);
Мы видим, что в конструктор передалось имя целевого метода. Тип этого метода должен быть обязательно void (раз мы решили так сделать в самом начале). И конструктором создаётся экземпляр под именем NewDelegate.
Целевой метод:
static void MyMethod()
{
/* Тут может быть какой-либо код */
}
Для запуска делегата вызываем объект нашего делегата (будет выполнен метод MyMethod()):
NewDelegate();
Компилируем приложение, проверяем работу текстовых полей третьей добавленной формы и главной формы. При изменении текста в главной форме меняется значение в поле вызываемой формы (по нажатию кнопки Для делегата № 2). Изменение значения поля в вызванной форме приводит к обратному эффекту, а также вызову MessageBox.
Рис. 7. 3. Динамическое изменение значений текстового полей главной формы (во время ввода данных в текстовом поле дочерней формы)