日期:2014-05-18 浏览次数:20973 次
private void Main_Load(object sender, EventArgs e) { //当前程序集路径 string dir = Assembly.GetEntryAssembly().Location; //string dir =Application.ExecutablePath; dir = Path.GetDirectoryName(dir); if (!Directory.Exists(dir)) { MessageBox.Show("读取DLL失败!"); return; } //扫描下所有的dll文件 string[] dlls = Directory.GetFiles(dir, "*.dll"); foreach (string item in dlls) { Assembly asm = Assembly.LoadFile(item); Type[] typeArray = asm.GetExportedTypes(); foreach (Type typeitem in typeArray) { Type typeIExtension = typeof(I_Extension.I_Extension); //必须是实现了I_Extension接口,并且不能是抽象类 if (typeIExtension.IsAssignableFrom(typeitem) && !typeitem.IsAbstract) { I_Extension.I_Extension IExtension = (I_Extension.I_Extension)Activator.CreateInstance(typeitem); IExtension.Function(this); } } } }
public interface I_Extension { /// <summary> /// 插件名称 /// </summary> string Name { set; get; } /// <summary> /// 插件执行内容 /// </summary> void Function(System.Windows.Forms.Form form); }
public class MenuStrip : I_Extension.I_Extension { private const string SqlCon = "server=.;database=GT_Menu;uid=sa;pwd=000110"; private string name = "菜单控件"; public string Name { get { return name; } set { name = value; } } public void Function(Form form) { InitializeComponent(form); Bind(); } private System.Windows.Forms.MenuStrip menuStrip1; private void InitializeComponent(Form form) { menuStrip1 = new System.Windows.Forms.MenuStrip(); // // menuStrip1 // menuStrip1.Name = "menuStrip1"; menuStrip1.TabIndex = 0; menuStrip1.Text = "menuStrip1"; // // // form.MainMenuStrip = menuStrip1; form.Controls.Add(menuStrip1); } private void Bind() { DataTable dt = SqlHelper.ExecuteDataset(SqlCon, CommandType.Text, "select * from Menu_DLL", null).Tables[0]; DataRow[] dr0 = dt.Select("[MenuItmeID] = 0"); for (int i = 0; i < dr0.Length; i++) { ToolStripMenuItem tsmi = new ToolStripMenuItem(dr0[i]["MenuItmeDLL"].ToString()); D_MenuID(dt, Convert.ToInt32(dr0[i]["MenuID"].ToString()), ref tsmi); menuStrip1.Items.Add(tsmi); } } void D_MenuID(DataTable dt, int MenuItmeNum, ref ToolStripMenuItem tsmi) { foreach (DataRow dr in dt.Select("[MenuItmeID] = " + MenuItmeNum.ToString())) { ToolStripMenuItem tsmitem = new ToolStripMenuItem(dr["MenuItmeDLL"].ToString()); tsmitem.Tag = dr["MenuID"].ToString();