Методические материалы с описанием последовательности создания плагинов на C#, их исходники в виде полного проекта

Ниже приведены исходные коды всего проекта.

Файл AssemblyInfo.cs


using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Управление общими сведениями о сборке осуществляется с помощью набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, 
// связанные со сборкой.
[assembly: AssemblyTitle("Наш новый плагин")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NewPlugin")]
[assembly: AssemblyCopyright("Copyright ©  2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми 
// для COM-компонентов.  Если требуется обратиться к типу в этой сборке через 
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("2247ac22-69f8-46f4-99af-650eea2187b3")]
// Сведения о версии сборки состоят из следующих четырех значений:
//      Основной номер версии
//      Дополнительный номер версии 
//      Номер построения
//      Редакция
// Можно задать все значения или принять номер построения и номер редакции по умолчанию, 
// используя «*», как показано ниже:
// [assembly: AssemblyVersion(«1.0.*»)]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Файл MainClass.cs


using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Interfaces;
using System.Xml.Linq;
using System.Reflection;
namespace NewPlugin
{
    public class MainClass : Interfaces.IMainPlugin
    {
        protected internal static IMainApp App;
        protected internal static IWorkClass Work;
        #region Члены IMainPlugin
        string Interfaces.IMainPlugin.Name
        {
            get { return AssemblyClass.GetName(Assembly.GetExecutingAssembly()); }
        }
        string Interfaces.IMainPlugin.GUID
        {
            get { return AssemblyClass.GetGuid(Assembly.GetExecutingAssembly()); }
        }
        public void StartPlugin(XElement XSettings, IMainApp app, IWorkClass work)
        {
            App = app;
            Work = work;
            // Код Плагина
        }
        private Interfaces.Forms.IControlSettings _controlSettings;
        public Interfaces.Forms.IControlSettings SettingsForm
        {
            get
            {
                if (_controlSettings == null)
                    _controlSettings = new UCSettings();
                return _controlSettings;
            }
        }
        #endregion
    }
} 

Файл UCSettings.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
namespace NewPlugin
{
    public partial class UCSettings : UserControl, Interfaces.Forms.IControlSettings
    {
        private XElement _data;
        public UCSettings()
        {
            InitializeComponent();
        }
        private string keyProc;
        public bool LoadSettings(XElement data)
        {
            _data = data;
            var xElement = _data.Element("number");
            if (xElement != null)
                txtNumber.Text = xElement.Value;
            keyProc = MainClass.Work.OpenForm.ProcOpen();
            return true;
        }
        public bool SaveSettings()
        {
            MainClass.Work.OpenForm.ProcClose(keyProc);
            int value;
            if (int.TryParse(txtNumber.Text, out value))
            {
                // если преобразование прошло успешно
                XElement number = _data.Element("number");
                if (number == null)
                {
                    number = new XElement("number");
                    _data.Add(number);
                }
                number.Value = txtNumber.Text;
                return true;
            }
            else
            {
                MessageBox.Show("Ввведите число.", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }
    }
} 

Файл UCSettings.Designer.cs


namespace NewPlugin
{
    partial class UCSettings
    {
        /// <summary> 
        /// Требуется переменная конструктора.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary> 
        /// Освободить все используемые ресурсы.
        /// </summary>
        /// истинно, если управляемый ресурс должен быть удален; иначе ложно.
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Код, автоматически созданный конструктором компонентов
        /// <summary> 
        /// Обязательный метод для поддержки конструктора - не изменяйте 
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        private void InitializeComponent()
        {
            this.txtNumber = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // txtNumber
            this.txtNumber.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.txtNumber.Location = new System.Drawing.Point(22, 42);
            this.txtNumber.Name = «txtNumber»;
            this.txtNumber.Size = new System.Drawing.Size(330, 20);
            this.txtNumber.TabIndex = 0;
            // label1
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(19, 13);
            this.label1.Name = «label1»;
            this.label1.Size = new System.Drawing.Size(257, 26);
            this.label1.TabIndex = 1;
            this.label1.Text = «Введите число, \r\nесли введено не число плагин не даст сохранить»;
            // UCSettings
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.label1);
            this.Controls.Add(this.txtNumber);
            this.Name = «UCSettings»;
            this.Size = new System.Drawing.Size(369, 285);
            this.ResumeLayout(false);
            this.PerformLayout();
        }
        #endregion
        private System.Windows.Forms.TextBox txtNumber;
        private System.Windows.Forms.Label label1;
    }
}