DevExpress中使用DocumentManager,并确保不重复

https://www.devexpress.com/Support/Center/Question/Details/Q411356

 

 

 

复制代码
 void ActivatForm(Type someType)
        {
            foreach (var item in tabbedView1.Documents)
            {
                if (item.Control.GetType() == someType)
                {
                    tabbedView1.Controller.Activate(item);
                    return;
                }
            }
            var instance = Activator.CreateInstance(someType);
            tabbedView1.AddDocument(instance as Control);
        }

        private void navBarItem1_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            ActivatForm(typeof(XtraForm1));
        }

        private void navBarItem2_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            ActivatForm(typeof(XtraForm2));
        }

        private void navBarItem3_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
        {
            ActivatForm(typeof(XtraForm3));
        }
复制代码

 

 

在主窗体Load的时候,获取所有继承自XtraForm的类型

复制代码
 private Dictionary<string, Type> GetAllXtraForm()
        {
            Assembly assembly = Assembly.GetExecutingAssembly();
            var list = assembly.GetTypes().Where(typeof(XtraForm).IsAssignableFrom).ToList();
            var dic = new Dictionary<string, Type>();
            foreach (var item in list)
            {
                dic.Add(item.ToString(), item);
            }
            return dic;
        }
复制代码

 

通说navBarControl上的单击事件,打开窗体

复制代码
 private void ActivatForm(string name)
        {
            var className = name.Replace("navBarItem",string.Empty);
            Type someType = xtraForms.FirstOrDefault(x => x.Key.Contains(className)).Value;
            if (someType == null)
            {
                throw new Exception($@"无法识别的类型{className}");
            }
            var baseDocument = tabbedView1.Documents.FirstOrDefault(x => x.Control.GetType() == someType);
            if (baseDocument == null)
            {
                var instance = Activator.CreateInstance(someType);
                var control = instance as Control;
                if (control == null)
                {
                    throw new Exception($@"无法将{instance.GetType()}转换为{typeof(Control)}");
                }
                tabbedView1.AddDocument(control);
                tabbedView1.ActivateDocument(control);
            }
            else
            {
                tabbedView1.Controller.Activate(baseDocument);
            }
        }
复制代码

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(4180)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2015-11-04 error: dst ref refs/heads/zhCN_v0.13.1 receives from more than one src.
点击右上角即可分享
微信分享提示