自定义插件

xiaoxiao2021-02-28  93

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; using System.IO; using System.Reflection; using MyEditPlus; namespace 记事本 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //窗体加载的时候,扫描Lib文件是否有dll文件 string msg = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Lib"); //得到Lib的路径 string[] files = Directory.GetFiles(msg, "*.dll");//搜索该路径中的dll文件 for (int i = 0; i < files.Length; i++) { //获取所有的程序集 Assembly ass = Assembly.LoadFile(files[i]); //获取所有的type Type[] tps = ass.GetTypes(); //获取接口的type Type iEdi = typeof(IEditPlus); //判断插件的文件,有没有遵循我主程序的规范(接口) for (int j = 0; j < tps.Length; j++) { if (iEdi.IsAssignableFrom(tps[j]) && !tps[j].IsAbstract) { //创建对象 IEditPlus plus = (IEditPlus)Activator.CreateInstance(tps[j]); //返回当前菜单的对象 ToolStripItem tsi = Tmi.DropDownItems.Add(plus.Name);//把功能的名字显示到菜单中 tsi.Tag = plus;//接口存到Tag属性中 //单击事件 tsi.Click += tsi_Click; } } } } void tsi_Click(object sender, EventArgs e) { ToolStripItem tsi = sender as ToolStripItem; IEditPlus iep = tsi.Tag as IEditPlus; txtMsg.Text = iep.ChangeString(txtMsg); } } } using MyEditPlus; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyNoteBook { public class ChangeStringByInterface : IEditPlus { public string Name { get { return "小写转大写"; } } public string ChangeString(System.Windows.Forms.TextBox tb) { return tb.Text.ToUpper(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;//为了把文本框传进去 namespace MyEditPlus { public interface IEditPlus { /// <summary> /// 插件功能的名字 /// </summary> string Name { get; } string ChangeString(TextBox tb); } }
转载请注明原文地址: https://www.6miu.com/read-74228.html

最新回复(0)