Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

2. Удалённый объект: создание библиотеки классов удалённого объекта

Запускаем Visual Studio 2010, откроется Начальная страница:

Для начала, надо создать первый проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице):

Рис. 2. 1. Создание нового проекта

Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Библиотека классов. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.

Рис. 2. 2. Окно создания нового проекта

В поле Имя вводим LWP11-RemoteObject это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).

Рис. 2. 3. Вводим данные нового проекта библиотеки классов

После нажатия клавиши ОК мы увидим сформированный проект и исходный код библиотеки классов (не пустой изначально).

Рис. 2. 4. Обозреватель решений: состав проекта библиотеки классов сформированного средой разработки

Теперь, можно откомпилировать созданную программу, нажав клавишу F6 (Построение -> Построить решение). Тем самым мы собираем библиотеку в DLL-файл (и производим компиляцию debug-версии библиотеки) (Debug выбрано изначально).

Рис. 2. 5. Скомпилированная библиотека классов по конфигурации Debug

Теперь вставим место всего кода единственного файла Class1.cs следующий код:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LWP11_RemoteObject

{

public interface IRemoteSend1

{

void Send(int x, int y);

}

public interface IRemoteSend2

{

void Send(int x, string y);

}

}

Сам файл Class1.cs переименуем в LWP11RO.cs. Для переименования необходимо выделить файл в обозревателе решений, далее нажать F2 на клавиатуре, либо щёлкнуть правой кнопкой мыши на файле, далее в выпадающем списке найти Переименовать.

«Перестроим» нашу библиотеку, нажав клавишу F6 (Построение -> Построить решение) но уже по конфигурации Release (для этого выбираем другую конфигурацию: в выпадающем списке Конфигурация решения). Тем самым мы собираем библиотеку в DLL-файл (и производим компиляцию уже release-версии библиотеки).

Найдём откомпилированную библиотеку классов и поместим её в любое удобное место на диске (для последующего быстрого поиска).

3. Клиент: создание приложения Windows Forms

Снова запускаем Visual Studio 2010, откроется Начальная страница:

Для начала, надо создать проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице).

Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке Приложение Windows Forms. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.

В поле Имя вводим LWP11-Client это название программы (выбрано по названию лабораторного практикума, номеру и названию работы, через тире в названии обозначаем принадлежность будущего приложения). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).

Рис. 3. 1. Вводим данные нового проекта приложения Windows Forms

После нажатия клавиши ОК мы увидим сформированный проект и исходный код приложения Windows Forms (не пустого изначально).

Рис. 3. 2. Обозреватель решений: состав проекта приложения Windows Forms сформированного средой разработки

Теперь, можно откомпилировать созданную программу, нажав клавишу F5 (Отладка -> Начать отладку или нажав на иконку . Тем самым мы запускаем приложение в режиме отладки (и производим компиляцию debug-версии программы) (Debug выбрано изначально).

Рис. 3. 3. Запуск приложения Windows Forms по конфигурации Debug

Модифицируем приложение. Для начала изменим размер нашей единственной формы. Для этого можно потянуть за уголок в нужном направлении на странице визуального представления формы1. Но также размер можно менять на панели свойств этой формы. Для этого нужно поменять значение размера в пикселях (высоту и ширину) в поле Size.

ПРИМЕЧАНИЕ № 1: Для перехода на визуальное представление формы, необходимо двойным нажатием в обозревателе решений нажать на значок формы ( ) или выбрать вкладку на панели вкладок с именем <имя формы>.cs [Конструктор].

Задаём следующие параметры формы на панели Свойства:

(Name)

изменим с Form1.cs2 на LWP11Main

^ Поменяем внутреннее имя формы.

Text

изменим с Form1 на Динамическая связь приложений (C#) :: Клиент

^ Поменяем заголовок формы (то что отображается в шапке приложения слева).

Icon

изменим изображение (иконку) приложения

^ Необходим файл значка *.ico.

Size

изменим со значений 300; 300 на 500; 200

^ Поменяем размер формы.

ПРИМЕЧАНИЕ № 2: Для того, чтобы поменять имя файла нашей формы, необходимо выполнить следующее: выделить в обозревателе решений значок формы ( ) и нажать правую кнопку мыши, затем выбрать Переименовать. Ввести необходимое новое имя СОХРАНЯЯ расширение *.cs. После смены имени, автоматически поменяются имена проассоциированных непосредственно с формой файлов:

Получим нечто подобное:

Рис. 3. 4. Модифицированная форма приложения

Теперь необходимо добавить удалённый объект в качестве Ссылки. Выполним: Проект -> Добавить ссылку, либо ПКМ на Ссылки в обозревателе решений, далее Добавить ссылку...:

В открывшемся окне перейдём на вкладку Обзор, укажем путь к библиотеке классов, которую мы уже скомпилировали:

Рис. 3. 5. Добавить ссылку: выбор нужного объекта, а именно ранее скомпилированной библиотеки классов: LWP11-RemoteObject.dll

Жмём ОК. Удалённый объект добавлен в наше приложение и теперь можно работать с классами, предоставленными этим объектом:

Теперь приступим к формированию элементов и их функциональности. Для начала расставим элементы как показано на рисунке ниже:

Рис. 3. 6. Расстановка элементов на форме (на форме LWP11Main проекте LWP11-Client)

Здесь два простых TextBox и два Label.

По порядку распишем Свойства каждого элемента:

TextBox:

(Name):

TB_1

Size:

30; 20

TextBox:

(Name):

TB_2

Size:

30; 20

Теперь отправляемся в код формы (правая кнопка мыши на значке формы, далее Перейти к коду или нажмём на клавишу F7):

В самое начало кода добавим:

using LWP11_RemoteObject; // Подключаем объект

Найдём:

public partial class LWP11Main : Form

{

Добавим после:

// Переменная для объекта

private IRemoteSend1 _rs1;

private IRemoteSend2 _rs2;

Событие KeyPress верхнего TextBox:

private void TB_1_KeyPress(object sender, KeyPressEventArgs e)

{

// Введённые символы должны быть только цифрами, иначе ввода не будет (символ не введётся)

if (!Char.IsDigit(e.KeyChar))

{

e.Handled = true;

}

}

Событие KeyPress нижнего TextBox:

private void TB_2_KeyPress(object sender, KeyPressEventArgs e)

{

// Введённые символы должны быть только буквами, иначе ввода не будет (символ не введётся)

if (!Char.IsLetter(e.KeyChar))

{

e.Handled = true;

}

}

Событие MouseClick формы LWP11Main:

private void LWP11Main_MouseClick(object sender, MouseEventArgs e)

{

// Получаем объект

_rs1 = (IRemoteSend1)Activator.GetObject(typeof(IRemoteSend1), "ipc://4567/RemoteSend1.rem"); // Открываем первый канал

// Передаём координаты нажатия ЛКМ

try

{

_rs1.Send(e.X, e.Y);

}

catch { }

}

Последнее событие TextChanged нижнего TextBox:

private void TB_2_TextChanged(object sender, EventArgs e)

{

// Получаем объект

_rs2 = (IRemoteSend2)Activator.GetObject(typeof(IRemoteSend2), "ipc://4567/RemoteSend2.rem"); // Открываем первый канал

// Передаём данные из TextBox

try

{

_rs2.Send(Convert.ToInt16(TB_1.Text), TB_2.Text);

}

catch { }

}

Компилируем приложение (Release) и запускаем. Проверяем работоспособность текстовых полей. Вводим в верхнее только цифры, в нижнее только буквы:

Рис. 3. 7. Окончательная работа приложения-клиента (LWP11-Client.exe)