DEV控件及如何实现一些功能的应用(附带PPT讲解)

如何利用DEV控件实现选项卡式浏览应用程序:实现如下效果:如感觉看了累的,请下载我为大家准备的PPT及免费视频讲解:/Files/0771bc/DEV控件.rar

 

HIS课程学习群:85281015

 

代码下载地址(工具和视频太大,想要的留个邮箱,我发到你们邮箱):/Files/0771bc/DevTest.rar

/Files/0771bc/DockTest.rar

 

实现步骤如下:

一、选项卡式浏览实现方法

选项卡式浏览需要的控件及类库:

使用第三方控件WinFormsUI.Docking.dll;
他是开源项目DockPanel Suite的一个类库,可以实现像Visual Studio的窗口停靠、拖拽等功能。该项目下载地址:http://sourceforge.net/projects/dockpanelsuite

选项卡式浏览实现思路(如下图所示):

新建一个窗体,在工具箱上右键—>选择项,找到WeifenLuo.WinFormsUI.Docking.dll;
将dockPanel拖到窗体Form1上 ;
设置Form1的IsMdiContainer属性为true,表示该窗体是一个父窗体;
在代码中修改窗体继承于DockContent,如public partial class Form2 : DockContent ;
然后显示子窗体,如:Form2 frm= new Form2();
 frm.Show(this.dockPanel1);

二、动态菜单实现方法

初始状态如:

 

 

加载菜单之后的效果:

加载父/子级菜单:

给自动菜单加事件:

三、实现过程-定义接口

定义窗体基类并实现接口

四、主体框架部分实现过程

4. 加载菜单信息:

DataRow[] drs = dt.Select( " ParentNodeId = 0 ");
                 foreach (DataRow dr  in drs)
                {
BarSubItem barSubItem =  new BarSubItem(barManager, dr[“DisplayName                     mainMenu.InsertItem(mainMenu.ItemLinks[mainMenu.ItemLinks.Count -  1], barSubItem);
                     foreach (DataRow item  in dt.Rows)
                    {
                         if (dr[ " NodeId "]== item[ " ParentNodeId "]) // 属于该节点
                        {
                            BarItem barSmallItem =  new BarButtonItem(barManager, item[ " DisplayName "]); // 创建一个子菜单
                            barSubItem.AddItem(barSmallItem);                            barSmallItem.ItemClick +=  new ItemClickEventHandler(DllPlugInItemClick);
plugins.Add(已经产生的菜单信息加入集合);
                        }
                    }
                }

5. 动态反射菜单信息:

 

private  void DllPlugInItemClick( object sender, ItemClickEventArgs e){            
     string path = Application.StartupPath+ " \\ ";
                Plugin plugin=plugins[e.Item.Caption];
                Assembly ab = Assembly.LoadFrom(path + plugin.NameSpaceName +  " . " + plugin.Extensions);
            Type[] types = ab.GetTypes();
             foreach (Type t  in types)
            {
                 if (t.GetInterface( " IPlugin ") !=  null&&t.Name==plugin.ClassName)
                {
              if (loadedPlugins.Contains(t.FullName))
                         return;
                       IPlugin selObj = (IPlugin)ab.CreateInstance(t.FullName);
                       selObj.ShowDlg( this.dockPanel1, e.Item.Caption);
            loadedPlugins.Add(t.FullName);
                }
            }
        }

6. 防止重开一个面板:

 

// 关闭选项卡时发生
if (loadedPlugins.Contains(e.Content.DockHandler.Form.GetType().FullName))
    {
        loadedPlugins.Remove(e.Content.DockHandler.Form.GetType().FullName);
    }

最终效果图如下:

转载于:https://www.cnblogs.com/0771bc/archive/2011/12/18/2291736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值