Создание расширяемого приложения Windows Forms
Создание расширяемого приложения Windows Forms
Заключительным шагом будет создание приложения Windows Forms, которое позволит пользователю выбрать подключаемый блок с помощью стандартного диалогового окна открытия файла Windows. Создав новое приложение Windows Forms (с именем MyExtendableApp), добавите ссылку на компоновочный блок CommonSnappableTypes.dll, но не устанавливайте ссылок на библиотеки программного кода CSharpSnapIn.dll и VbNetSnapIn.dll. Помните о том, что целью создания этого приложения является демонстрация динамического связывания и отображения при выяснении возможности подключения независимых двоичных блоков, созданных сторонними производителями.
Снова подчеркнем, что здесь не рассматриваются детали процесса построения приложений Windows Forms. Тем не менее, предполагается, что вы поместите компонент MenuStrip в окно формы и определите с его помощью меню Сервис, которое будет содержать единственный пункт Подключаемый модуль (рис. 12.11).

Рис. 12.11. Исходный графический интерфейс MyExtendableApp
Эта форма Windows должна также содержать тип Listbox (которому здесь назначено имя lstLoadedSnapIns), используемый для отображения имен подключаемых модулей, загружаемых пользователем. На рис. 12.12 показан окончательный вид графического интерфейса приложения, о котором идет речь.

Рис. 12.12. Окончательный вид графического интерфейса MyExtendableApp
Программный код для обработки выбора Сервис?Подключаемый модуль из меню (этот программный код можно создать с помощью двойного щелчка на пункте меню в окне проектирования формы), отображает диалоговое окно Открытие файла и читает путь к выбранному файлу. Соответствующая строка пути затем посылается вспомогательной функции LoadExternalModule() для обработки. Метод возвращает false (ложь), если он не обнаруживает класс, реализующий IAppFunctionality.
private void snapInModuleToolStripMenuItem_Click(object sender, EventArgs e) {
// Позволяет пользователю выбрать компоновочный блок для загрузки.
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK) {
if (LoadExternalModule(dlg.FileName) == false) MessageBox.Show("Нет реализации IAppFunctionality!");
}
}
Метод LoadExternalModule() решает следующие задачи.
• Динамически загружает компоновочный блок в память.
• Выясняет, содержит ли компоновочный блок тип, реализующий IAppFunctionality
Если тип, реализующий IAppFunctionality, обнаружен, вызывается метод DoIt(), и абсолютное имя типа добавляется в Listbox (заметьте, что цикл for должен выполнить проход по всем типам компоновочного блока, чтобы учесть возможность наличия в одном компоновочном блоке нескольких модулей расширения).
private bool LoadExternalModule(string path) {
bool foundSnapIn = false;
IAppFunctionality itfAppFx;
// Динамическая загрузка выбранного компоновочного блока.
Assembly theSnapInAsm = Assembly.LоadFrom(path);
// Получение всех типов компоновочного блока.
Tуре[] theTypes = theSnapInAsm.GetTypes();
// Поиск типа с реализацией IAppFunctionality.
for (int i = 0; i ‹ theTypes.Length; i++) {
Type t = theTypes[i].GetInterface("IAppFunctionality");
if (t != null) {
foundSnapIn = true;
// Динамическое связывание для создания типа.
object о = theSnapInAsm.CreateInstance(theTypes[i].FullName);
// Вызов DoIt() через интерфейс.
itfAppFx = о as IAppFunctionality;
itfAppFx.DoIt();
lstLoadedSnapIns.Items.Add(theTypes[i].FullName);
}
}
return foundSnapIn;
}
Теперь вы можете выполнить свое приложение. При выборе компоновочных блоков CSharpSnapIn.dll и VbNetSnapIn.dll вы должны увидеть соответствующее сообщение. На рис. 12.13 показан один из возможных вариантов выполнения.

Рис. 12.13. Подключение внешних компоновочных блоков
Завершающей задачей будет отображение метаданных, соответствующих атрибуту [CompanyInfo]. Для этого просто обновите LoadExternalModule(), чтобы перед выходом из контекста if вызывалась новая вспомогательная функция DisplayCompanyData(). Эта функция имеет один параметр типа System.Type.
private bool LoadExternalModule(string path) {
…
if (t != null) {
…
// Отображение информации о компании.
DisplayCompanyData(theTypes[i]);
}
return foundSnapIn;
}
Для поступающего на вход типа просто отобразите атрибут [CompanyInfo].
private void DisplayCompanyData(Type t) {
// Получение данных [CompanyInfo].
object[] customAtts = t.GetCustomAttributes(false);
// Вывод данных.
foreach (CompanyInfoAttribute с in customAtts) {
MessageBox.Show(с.Url, String.Format("Дополнительные сведения о {0} ищите по адресу", с.Name));
}
}
Превосходно! На этом рассмотрение примера завершается. Я надеюсь, что к этому моменту нашего обсуждения вы осознаете, что подходы, представленные в этой главе, могут найти применение и на практике, а не только при разработке средств построения программ.
Исходный код. Программный код приложений CommonSnappableTypes, CSharpSnapIn, VbNetSnapIn и MyExtendableApp размещен в подкаталоге, соответствующем главе 12.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
7.3. Сетевые приложения и службы Windows Vista
7.3. Сетевые приложения и службы Windows Vista Windows Vista содержит целый ряд встроенных приложений и служб для удаленного управления компьютером и совместного использования сетевых ресурсов. Такие приложения, как Удаленный помощник и Подключение к удаленному Рабочему столу
Создание пользовательского интерфейса на основе Windows Forms
Создание пользовательского интерфейса на основе Windows Forms Разработчики предыдущих версий Visual Basic первыми предложили концепцию связывания данных, согласно которой связанный с данными объект или элемент управления данными (data control) позволяет программистам с минимальными
Как запускать UNIX приложения под Windows
Как запускать UNIX приложения под Windows O В этой главе:O Отличия между UNIX и WindowsO Перенос приложений с UNIX на WindowsO Техника эмуляции UNIXO Различия между дескриптором и обработчикомO Различия в реализации процессов в UNIX и WindowsO Имитация вызовов fork и execO Эмуляция сигналовO Отличия в
Инструменты проектирования Windows Forms
Инструменты проектирования Windows Forms Windows Forms является средством создания приложений, возможности которого мы рассмотрим позже. А сейчас, чтобы продолжить рассмотрение SharpDevelop, щелкните на ярлыке вкладки Design внизу окна программного кода MainForm.cs. Откроется интегрированное
Создание расширяемого приложения
Создание расширяемого приложения В следующих разделах мы с вами проанализируем пример, иллюстрирующий процесс создания расширяемого приложения Windows.Forms, которое можно будет расширять за счет функциональных возможностей внешних компоновочных блоков. Сам процесс
ГЛАВА 19. Создание окон с помощью System.Windows.Forms
ГЛАВА 19. Создание окон с помощью System.Windows.Forms Если вы прочитали предыдущие 18 глав, вы должны иметь солидную базу дли использования языка программирования C# и архитектуры .NET. Вы, конечно же, можете применить полученные знания для построения консольных приложений следующего
Обзор пространства имен System.Windows.Forms
Обзор пространства имен System.Windows.Forms Как и любое другое пространство имен, System.Windows.Forms компонуется из различных классов, структур, делегатов, интерфейсов и перечней. Хотя различие между консольным (CUI) и графическим (GUI) интерфейсами, на первый взгляд, кажется подобным
Работа с типами Windows Forms
Работа с типами Windows Forms При построении приложения Windows Forms вы можете, при желании, создать весь соответствующий программный код вручную (например, в редакторе Блокнот или в редакторе TextPad), а затем отправить файлы *.cs компилятору командной строки C# с флагом /target:winexe.
Анализ проекта Windows Forms в Visual Studio 2005
Анализ проекта Windows Forms в Visual Studio 2005 Любой тип Form проекта Windows Forms в Visual Studio 2005 представлен двумя связанными C#-файлами, в чем можно убедиться непосредственно, заглянув в окно Solution Explorer (рис. 19.10). Рис. 19.10. Каждая форма является композицией двух файлов *.csЩелкните правой кнопкой
ГЛАВА 21. Использование элементов управления Windows Forms
ГЛАВА 21. Использование элементов управления Windows Forms Эта глава представляет собой краткое руководство по использованию элементов управления, определенных в пространстве имен System.Windows.Forms. В главе 19 вы уже имели возможность поработать с некоторыми элементами управления,
Элементы управления Windows Forms
Элементы управления Windows Forms Пространство имен System.Windows.Forms содержит ряд типов, представляющих наиболее часто используемые элементы графического интерфейса, которые обеспечивают поддержку взаимодействия с пользователем в приложении Windows Forms. Многие элементы управления
Создание пользовательских элементов управления Windows Forms
Создание пользовательских элементов управления Windows Forms Платформа .NET предлагает для разработчиков очень простой способ создания пользовательских элементов интерфейса. В отличие от (теперь уже считающихся устаревшими) элементов управления ActiveX, для элементов
Динамическое позиционирование элементов управления Windows Forms
Динамическое позиционирование элементов управления Windows Forms Чтобы завершить эту главу, давайте рассмотрим несколько подходов, которые можно использовать для управления размещением элементов управления в форме. Если при создании типа Form вы предполагаете, что элементы
Клиент Windows Forms
Клиент Windows Forms Чтобы проверить работу нового Web-сервисa XML, создайте приложение Windows Forms и укажите в нем ссылку на CarsSalesInfoWS, используя диалоговое окно Add Web Reference в Visual Studio 2005 (рис. 25.7). Pиc. 25.7. Добавление ссылки на CarsSalesInfoWS Теперь просто используйте генерируемый агент для вызова
Выполнение Firebird как приложения на платформах Windows
Выполнение Firebird как приложения на платформах Windows Если сервер Firebird выполняется как приложение, вы должны увидеть иконку в системной области на серверной машине, как показано на рис. 4.1. Вид иконки в системной области зависит от того, запущен ли только сервер, или вы
4.7. Стандартные приложения Windows 2000
4.7. Стандартные приложения Windows 2000 В операционную систему Windows 2000 входит ограниченный набор прикладных программ, с помощью которых можно решать некоторые простейшие повседневные задачи, пока на компьютере не установлены более мощные программные средства. Такие