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);
}
}