zoukankan      html  css  js  c++  java
  • 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);
        }

    最终效果图如下:

  • 相关阅读:
    hdu1257
    P6198 [EER1]单调栈 题解(分治+构造)
    P3193 [HNOI2008]GT考试 题解(kmp+矩阵快速幂)
    Product of GCDs 题解(欧拉降幂+贡献)
    P2501 [HAOI2006]数字序列 题解(dp+构造)
    欧拉降幂
    I love max and multiply 题解(二进制dp)
    永不言弃 题解(线段树维护hash+二分)
    Problem D. Ice Cream Tower 题解(二分+贪心)
    E. Kefa and Watch 题解(线段树维护hash+循环节结论)
  • 原文地址:https://www.cnblogs.com/0771bc/p/2291736.html
Copyright © 2011-2022 走看看