From ec169e014cda94cd9d14548cab46bcc550fb287a Mon Sep 17 00:00:00 2001 From: ushakov Date: Fri, 9 Sep 2016 13:24:38 +1000 Subject: [PATCH 1/6] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8bc238 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +################################################################################ +# This .gitignore file was automatically created by Microsoft(R) Visual Studio. +################################################################################ + +/ExternalModuleExample/Properties From 77ce588bc57bbd96ff312ae8509954b63f14e3ef Mon Sep 17 00:00:00 2001 From: Werzet Date: Fri, 9 Sep 2016 13:25:40 +1000 Subject: [PATCH 2/6] Delete .gitignore --- .gitignore | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index a8bc238..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -################################################################################ -# This .gitignore file was automatically created by Microsoft(R) Visual Studio. -################################################################################ - -/ExternalModuleExample/Properties From fec2408591c2ce6b1d7aedaa42d5d94b52b71ebe Mon Sep 17 00:00:00 2001 From: ushakov Date: Fri, 9 Sep 2016 13:30:34 +1000 Subject: [PATCH 3/6] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + ExternalModuleExample/App.config | 6 + .../ExternalModuleExample.csproj | 123 +++++++++++++++++ .../ExternalModuleExample.csproj.user | 7 + .../ExternalModuleExample.sln | 22 +++ ExternalModuleExample/MainForm.Designer.cs | 84 ++++++++++++ ExternalModuleExample/MainForm.cs | 94 +++++++++++++ ExternalModuleExample/MainForm.resx | 126 ++++++++++++++++++ ExternalModuleExample/Plugin.cs | 123 +++++++++++++++++ ExternalModuleExample/Program.cs | 22 +++ ExternalModuleExample/Resources/Icon.png | Bin 0 -> 670 bytes 11 files changed, 609 insertions(+) create mode 100644 ExternalModuleExample/App.config create mode 100644 ExternalModuleExample/ExternalModuleExample.csproj create mode 100644 ExternalModuleExample/ExternalModuleExample.csproj.user create mode 100644 ExternalModuleExample/ExternalModuleExample.sln create mode 100644 ExternalModuleExample/MainForm.Designer.cs create mode 100644 ExternalModuleExample/MainForm.cs create mode 100644 ExternalModuleExample/MainForm.resx create mode 100644 ExternalModuleExample/Plugin.cs create mode 100644 ExternalModuleExample/Program.cs create mode 100644 ExternalModuleExample/Resources/Icon.png diff --git a/.gitignore b/.gitignore index a8bc238..83b8011 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ ################################################################################ /ExternalModuleExample/Properties +/ExternalModuleExample/obj/Debug +/ExternalModuleExample/.vs/ExternalModuleExample/v14 diff --git a/ExternalModuleExample/App.config b/ExternalModuleExample/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/ExternalModuleExample/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ExternalModuleExample/ExternalModuleExample.csproj b/ExternalModuleExample/ExternalModuleExample.csproj new file mode 100644 index 0000000..d59a7c3 --- /dev/null +++ b/ExternalModuleExample/ExternalModuleExample.csproj @@ -0,0 +1,123 @@ + + + + + Debug + AnyCPU + {8052604A-F1E4-48D9-AEBA-21E70547B383} + Library + Properties + ExternalModuleExample + ExternalModuleExample + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + ..\..\..\..\..\..\Program Files\LERS\Common\Plugins\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + False + ..\..\..\..\..\..\Program Files\LERS\Common\Framework\bin\Lers.Plugins.dll + False + + + False + ..\..\..\..\..\..\Program Files\LERS\Common\Framework\bin\Lers.Plugins.Attributes.dll + False + + + False + ..\..\..\..\..\..\Program Files\LERS\Common\Framework\bin\Lers.Reports.dll + False + + + False + ..\..\..\..\..\..\Program Files\LERS\Common\Framework\bin\Lers.System.dll + False + + + False + ..\..\..\..\..\..\Program Files\LERS\Common\Framework\bin\Lers.UI.dll + False + + + + + + + + + + + + + + + + Form + + + MainForm.cs + + + + + + MainForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + \ No newline at end of file diff --git a/ExternalModuleExample/ExternalModuleExample.csproj.user b/ExternalModuleExample/ExternalModuleExample.csproj.user new file mode 100644 index 0000000..d50832d --- /dev/null +++ b/ExternalModuleExample/ExternalModuleExample.csproj.user @@ -0,0 +1,7 @@ + + + + Program + C:\Program Files\LERS\Client\Lers.Client.exe + + \ No newline at end of file diff --git a/ExternalModuleExample/ExternalModuleExample.sln b/ExternalModuleExample/ExternalModuleExample.sln new file mode 100644 index 0000000..241f14a --- /dev/null +++ b/ExternalModuleExample/ExternalModuleExample.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExternalModuleExample", "ExternalModuleExample.csproj", "{8052604A-F1E4-48D9-AEBA-21E70547B383}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8052604A-F1E4-48D9-AEBA-21E70547B383}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8052604A-F1E4-48D9-AEBA-21E70547B383}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8052604A-F1E4-48D9-AEBA-21E70547B383}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8052604A-F1E4-48D9-AEBA-21E70547B383}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ExternalModuleExample/MainForm.Designer.cs b/ExternalModuleExample/MainForm.Designer.cs new file mode 100644 index 0000000..ded7acd --- /dev/null +++ b/ExternalModuleExample/MainForm.Designer.cs @@ -0,0 +1,84 @@ +namespace ExternalModuleExample +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.MainView = new System.Windows.Forms.DataGridView(); + this.MeasurePointName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.MeasurePointType = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.MainView)).BeginInit(); + this.SuspendLayout(); + // + // MainView + // + this.MainView.AllowUserToAddRows = false; + this.MainView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MainView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.MainView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.MeasurePointName, + this.MeasurePointType}); + this.MainView.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.MainView.Location = new System.Drawing.Point(12, 12); + this.MainView.Name = "MainView"; + this.MainView.Size = new System.Drawing.Size(765, 376); + this.MainView.TabIndex = 0; + // + // MeasurePointName + // + this.MeasurePointName.HeaderText = "Название точки учёта"; + this.MeasurePointName.Name = "MeasurePointName"; + this.MeasurePointName.ToolTipText = "MeasurePointName"; + // + // MeasurePointType + // + this.MeasurePointType.HeaderText = "Тип точки учёта"; + this.MeasurePointType.Name = "MeasurePointType"; + this.MeasurePointType.ToolTipText = "MeasurePointType"; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(789, 400); + this.Controls.Add(this.MainView); + this.Name = "MainForm"; + this.Text = "MainForm"; + ((System.ComponentModel.ISupportInitialize)(this.MainView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView MainView; + private System.Windows.Forms.DataGridViewTextBoxColumn MeasurePointName; + private System.Windows.Forms.DataGridViewTextBoxColumn MeasurePointType; + } +} \ No newline at end of file diff --git a/ExternalModuleExample/MainForm.cs b/ExternalModuleExample/MainForm.cs new file mode 100644 index 0000000..ccb98eb --- /dev/null +++ b/ExternalModuleExample/MainForm.cs @@ -0,0 +1,94 @@ +using Lers.Core; +using Lers.Plugins; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExternalModuleExample +{ + /// + /// Класс экранной формы + /// + public partial class MainForm : Form + { + /// + /// Экземпляр хост-интерфейса клиента + /// + IPluginHost host; + + public MainForm() + { + InitializeComponent(); + } + + /// + /// Инициализация формы + /// + /// + internal void Initialize(IPluginHost host) + { + // Сохраняем хост-интерфейса клиента себе в программу + this.host = host; + + // Получам список точек учёта от сервера + MeasurePoint[] measurePointList = host.Server.MeasurePoints.GetList(); + + // Если список точек учёта не пуст + if (measurePointList != null) + { + // Проходим по всему списку + foreach (MeasurePoint measurePoint in measurePointList) + { + string measurePointType = ""; + + // Смотрим тип точки учёта и в соответствии со значением присваиваем название + switch (measurePoint.SystemType) + { + case SystemType.ColdWater: + measurePointType = "Холодное водоснабжение"; break; + + case SystemType.Electricity: + measurePointType = "Электричество"; break; + + case SystemType.Gas: + measurePointType = "Газоснабдение"; break; + + case SystemType.Heat: + measurePointType = "Теплоснабжение"; break; + + case SystemType.HotWater: + measurePointType = "Горячее водоснабжение"; break; + + case SystemType.None: + measurePointType = "Нет типа"; break; + + case SystemType.Steam: + measurePointType = "Пароснабжение"; break; + + default: + measurePointType = "Не удалось получить тип"; break; + } + + // Добавляем запись в таболицу MainView + MainView.Rows.Add(measurePoint.FullTitle, measurePointType); + } + + // Ставим авто-ширину столбцов в такой режим, что суммарная ширина всех столбцов + // в точности заполняет отображаемую область MainView + MainView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + } + + else + // Если список точек учёта пуст, выводим сообщение + MessageBox.Show("Список точек учёта пуст", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + } +} diff --git a/ExternalModuleExample/MainForm.resx b/ExternalModuleExample/MainForm.resx new file mode 100644 index 0000000..21195f8 --- /dev/null +++ b/ExternalModuleExample/MainForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + \ No newline at end of file diff --git a/ExternalModuleExample/Plugin.cs b/ExternalModuleExample/Plugin.cs new file mode 100644 index 0000000..c3e4f75 --- /dev/null +++ b/ExternalModuleExample/Plugin.cs @@ -0,0 +1,123 @@ +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); + } + } + } +} diff --git a/ExternalModuleExample/Program.cs b/ExternalModuleExample/Program.cs new file mode 100644 index 0000000..9f4f8d1 --- /dev/null +++ b/ExternalModuleExample/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ExternalModuleExample +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/ExternalModuleExample/Resources/Icon.png b/ExternalModuleExample/Resources/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..908497f32f6786ed0d1dccec13f4004462f12afc GIT binary patch literal 670 zcmV;P0%84$P)L(|a$BNc#Mkvp93keD`wZ2%vOzbv;v6^@*lw zI1POVi^YPYqa(DE%jF(78jTlRV6)k>e!sulY%~mmM=NHnR4Oq6wzjqe0*W9AV!dAH zh0{z;O(Bs;{3_9PRI61eigJ+&+H_r4Yqc5zfdKmY`cN*HvADR1(a}-FVln&{p%5Gn2YPyX5DtftN~Ms`=dr%Nj@8vwp6~AN z@|x4>#PaeonBXlP-krU@Jyzr&|BH!<2}B|h%+Z+<0KHmML$Oc*2w+k3k&=PpMzsTd+K!x|BKu0#?H6MR?x4dnqVVgLXD07*qoM6N<$ Ef(3Cf_5c6? literal 0 HcmV?d00001 From a2801a2cbe785eb87d0eb4200a72116d917730c2 Mon Sep 17 00:00:00 2001 From: Werzet Date: Fri, 9 Sep 2016 13:33:19 +1000 Subject: [PATCH 4/6] Delete .gitignore --- .gitignore | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 37667ad..0000000 --- a/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -################################################################################ -# This .gitignore file was automatically created by Microsoft(R) Visual Studio. -################################################################################ - -/ExternalModuleExample/.vs/ExternalModuleExample/v14 -/ExternalModuleExample/obj/Debug From 09275140c4a2291fe7776a5aaa1d4771c45432a0 Mon Sep 17 00:00:00 2001 From: ushakov Date: Fri, 9 Sep 2016 13:48:23 +1000 Subject: [PATCH 5/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=84=D0=BE=D1=80=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExternalModuleExample/MainForm.cs | 69 ++++-------- ExternalModuleExample/Plugin.cs | 174 +++++++++++++++--------------- 2 files changed, 107 insertions(+), 136 deletions(-) diff --git a/ExternalModuleExample/MainForm.cs b/ExternalModuleExample/MainForm.cs index ccb98eb..981067a 100644 --- a/ExternalModuleExample/MainForm.cs +++ b/ExternalModuleExample/MainForm.cs @@ -9,74 +9,45 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using Lers.Utils; namespace ExternalModuleExample { /// /// Класс экранной формы /// - public partial class MainForm : Form - { + public partial class MainForm : Form + { /// /// Экземпляр хост-интерфейса клиента /// IPluginHost host; - public MainForm() - { - InitializeComponent(); - } + public MainForm() + { + InitializeComponent(); + } /// /// Инициализация формы /// /// - internal void Initialize(IPluginHost host) - { + internal void Initialize(IPluginHost host) + { // Сохраняем хост-интерфейса клиента себе в программу this.host = host; // Получам список точек учёта от сервера - MeasurePoint[] measurePointList = host.Server.MeasurePoints.GetList(); + MeasurePoint[] measurePointList = host.Server.MeasurePoints.GetList(); // Если список точек учёта не пуст - if (measurePointList != null) - { + if (measurePointList != null) + { // Проходим по всему списку - foreach (MeasurePoint measurePoint in measurePointList) - { - string measurePointType = ""; - - // Смотрим тип точки учёта и в соответствии со значением присваиваем название - switch (measurePoint.SystemType) - { - case SystemType.ColdWater: - measurePointType = "Холодное водоснабжение"; break; - - case SystemType.Electricity: - measurePointType = "Электричество"; break; - - case SystemType.Gas: - measurePointType = "Газоснабдение"; break; - - case SystemType.Heat: - measurePointType = "Теплоснабжение"; break; - - case SystemType.HotWater: - measurePointType = "Горячее водоснабжение"; break; - - case SystemType.None: - measurePointType = "Нет типа"; break; - - case SystemType.Steam: - measurePointType = "Пароснабжение"; break; - - default: - measurePointType = "Не удалось получить тип"; break; - } - + foreach (MeasurePoint measurePoint in measurePointList) + { // Добавляем запись в таболицу MainView - MainView.Rows.Add(measurePoint.FullTitle, measurePointType); + MainView.Rows.Add(measurePoint.FullTitle, EnumUtils.GetDescription(measurePoint.SystemType)); } // Ставим авто-ширину столбцов в такой режим, что суммарная ширина всех столбцов @@ -84,11 +55,11 @@ namespace ExternalModuleExample MainView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; } - else + else // Если список точек учёта пуст, выводим сообщение - MessageBox.Show("Список точек учёта пуст", - "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } + MessageBox.Show("Список точек учёта пуст", + "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } - } + } } diff --git a/ExternalModuleExample/Plugin.cs b/ExternalModuleExample/Plugin.cs index c3e4f75..c4ffbea 100644 --- a/ExternalModuleExample/Plugin.cs +++ b/ExternalModuleExample/Plugin.cs @@ -11,113 +11,113 @@ namespace ExternalModuleExample /// Класс, реализующий интерфейс IPlugin /// public class Plugin : IPlugin - { - /// - /// Экземпляр хост-интерфейса клиента - /// - internal static IPluginHost Host { get; private set; } + { + /// + /// Экземпляр хост-интерфейса клиента + /// + internal static IPluginHost Host { get; private set; } - /// - /// Список открытых окон - /// - private List visibleForms = new List(); + /// + /// Список открытых окон + /// + 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); - } - } - } + // Ищем меню Сервис. + 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(); + /// + /// Событие выбора приложения в меню Сервис + /// + /// + /// + private void OnItemClick(object sender, EventArgs e) + { + // Проверим, открыто ли такое окно + MainForm currentForm = GetOpenedForm(); - // Если такого окна нет, то открываем новое - if (currentForm == null) - NewForm(); + // Если такого окна нет, то открываем новое + if (currentForm == null) + NewForm(); - //Такое окно есть, переводим фокус на него - else - { - currentForm.Show(); - currentForm.Focus(); - } - } + //Такое окно есть, переводим фокус на него + else + { + currentForm.Show(); + currentForm.Focus(); + } + } - /// - /// Возвращает открытую форму или null если формы нет - /// - /// - private MainForm GetOpenedForm() - { - lock (this.visibleForms) - { - foreach (MainForm form in this.visibleForms) - { - return form; - } - } + /// + /// Возвращает открытую форму или null если формы нет + /// + /// + private MainForm GetOpenedForm() + { + lock (this.visibleForms) + { + foreach (MainForm form in this.visibleForms) + { + return form; + } + } - return null; - } + return null; + } - /// - /// Открываем новое окно - /// - private void NewForm() - { - // Создаём новый экземпляр формы - MainForm mainForm = new MainForm() { Text = "Пример внешнего модуля" }; + /// + /// Открываем новое окно + /// + private void NewForm() + { + // Создаём новый экземпляр формы + MainForm mainForm = new MainForm() { Text = "Пример внешнего модуля" }; - // Инициализируем форму - mainForm.Initialize(Host); + // Инициализируем форму + mainForm.Initialize(Host); - // Добавляем форму в список окон в программе - Host.MainWindow.AddPage(mainForm); + // Добавляем форму в список окон в программе + Host.MainWindow.AddPage(mainForm); - // Открываем форму - mainForm.Show(); + // Открываем форму + mainForm.Show(); - // Добавляем событие на закрытие формы - mainForm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(currentForm_FormClosed); + // Добавляем событие на закрытие формы + mainForm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(currentForm_FormClosed); - lock (this.visibleForms) - { - this.visibleForms.Add(mainForm); - } - } + 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); - } - } - } + /// + /// Закрыто окно. Удаляем его из списка открытых окон. + /// + /// + /// + void currentForm_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e) + { + lock (this.visibleForms) + { + this.visibleForms.Remove((MainForm)sender); + } + } + } } From 88fd0281a1830508b4ad175d1e3a7296279a2f96 Mon Sep 17 00:00:00 2001 From: Werzet Date: Fri, 9 Sep 2016 13:55:39 +1000 Subject: [PATCH 6/6] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1ad4513..0d11e0a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ |Проект|Описание| |------|--------| |AttributesSample | Работа с атрибутами. Консольное приложение. | +|ExternalModuleExample | Примеры простейшего модуля для ЛЭРС УЧЁТ | |GetDataSample | Получение данных из ЛЭРС УЧЁТ. Консольное приложение. | |ImportTemperature | Импорт температуры наружного воздуха в ЛЭРС УЧЁТ. | |KhvAdmDataAdapter | Экспорт данных из ЛЭРС УЧЁТ. Обработчик HttpHandler для веб-сайта |