zoukankan      html  css  js  c++  java
  • 插件的简单原理

    using IExtendServices;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace 插件的简单原理
    {
        public class ExtendServices
        {
            private MenuStrip ms = null;
            private RichTextBox txt = null;
            public ExtendServices(MenuStrip ms, RichTextBox txt)
            {
                this.ms = ms;
                this.txt = txt;
            }
            public void Service()
            {
                string[] plugFilesPath = Directory.GetFiles(Path.Combine(Application.StartupPath, "plugs"), "*.dll");
    
                foreach (string itemPath in plugFilesPath)
                {
                    Assembly ass = Assembly.LoadFrom(itemPath);
                    //获取所有的公共类型
                    Type[] assTypes = ass.GetExportedTypes();
                    //自定义的接口类型
                    Type itype = typeof(IExtendService);
                    foreach (Type itemtype in assTypes)
                    {
                        if (itemtype.IsPublic && itype.IsAssignableFrom(itemtype) && !itemtype.IsAbstract&&!itemtype.IsInterface)
                        {
                            IExtendService service = (IExtendService)Activator.CreateInstance(itemtype);
                            ToolStripMenuItem editItem = (ToolStripMenuItem)ms.Items[1];
    
                            ToolStripItem seritem = editItem.DropDownItems.Add(service.Name);
                            seritem.Tag = service;
                            seritem.Click += SerItemMethod;
                        }
                    }
    
                }
            }
    
            private void SerItemMethod(object sender, EventArgs e)
            {
                ToolStripItem service = (ToolStripItem)sender;
                ((IExtendService)service.Tag).Service(txt);
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CNotePadPlugs
    {
        public class ToASCII:IExtendServices.IExtendService
        {
            public string Name
            {
                get { return "ToASCII"; }
            }
    
            public void Service(System.Windows.Forms.RichTextBox txt)
            {
    
                string all = txt.Text;
                string txtSelected = txt.SelectedText;
    
                if (txtSelected == "")
                    txtSelected = all;
                
                int index = txt.SelectionStart;//2
                if (index == all.Length)
                    index = 0;
                //0
                string start = all.Substring(0, index);//2
                //1
                string upper = all.Substring(index, txtSelected.Length);
                char[] chars = upper.ToCharArray();
                upper = "";
                foreach (char item in chars)
                {
                    upper += (int)item;
                }
                //2
                string end = txt.Text.Substring(index + txtSelected.Length);
    
                txt.Text = start + upper + end;    
    
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IExtendServices
    {
        public interface IExtendService
        {
            string Name
            {
                get;
            }
            void Service(System.Windows.Forms.RichTextBox txt);
        }
    }

    源文件:http://pan.baidu.com/s/1ntp0XxZ

  • 相关阅读:
    C语言memmove()函数: 复制内存内容(可以重叠的内存块)
    #pragma pack(n)
    c++中sizeof的理解
    c/c++gdb下和发布版本下输出地址不同
    LeetCode 141. Linked List Cycle
    LeetCode 143. Reorder List
    TCP简介(一)
    通过cat方式生成yum源
    手动添加ceph的mds
    Linux 配置nfs
  • 原文地址:https://www.cnblogs.com/wjshan0808/p/3778518.html
Copyright © 2011-2022 走看看