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

    最终效果图如下:

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/0771bc/p/2291736.html
Copyright © 2011-2022 走看看