using Lers.Plugins; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ExternalModuleExample { /// /// Класс, реализующий интерфейс IPlugin /// public class Plugin : IPlugin { /// /// Экземпляр хост-интерфейса клиента /// internal static IPluginHost Host { get; private set; } /// /// Список открытых окон /// private List visibleForms = new List(); /// /// Метод, вызывающийся во время запуска клиента /// /// public void Initialize(IPluginHost pluginHost) { // Копируем экземпляр хост-интерфейса клиента в нашу программу Host = pluginHost; // Ищем меню Сервис. foreach (var item in Host.MainWindow.MainMenu.Items) { if (item.ID == (int)Lers.UI.SystemMenuId.Service) { // Добавляем подпункт в пункт главного меню Сервис. item.AddItem("Пример внешнего модуля", Properties.Resources.Icon, true, OnItemClick); } } } /// /// Событие выбора приложения в меню Сервис /// /// /// private void OnItemClick(object sender, EventArgs e) { // Проверим, открыто ли такое окно MainForm currentForm = GetOpenedForm(); // Если такого окна нет, то открываем новое if (currentForm == null) NewForm(); //Такое окно есть, переводим фокус на него else { currentForm.Show(); currentForm.Focus(); } } /// /// Возвращает открытую форму или null если формы нет /// /// private MainForm GetOpenedForm() { lock (this.visibleForms) { foreach (MainForm form in this.visibleForms) { return form; } } return null; } /// /// Открываем новое окно /// private void NewForm() { // Создаём новый экземпляр формы MainForm mainForm = new MainForm() { Text = "Пример внешнего модуля" }; // Инициализируем форму mainForm.Initialize(Host); // Добавляем форму в список окон в программе Host.MainWindow.AddPage(mainForm); // Открываем форму mainForm.Show(); // Добавляем событие на закрытие формы mainForm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(currentForm_FormClosed); lock (this.visibleForms) { this.visibleForms.Add(mainForm); } } /// /// Закрыто окно. Удаляем его из списка открытых окон. /// /// /// void currentForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) { lock (this.visibleForms) { this.visibleForms.Remove((MainForm)sender); } } } }