winform dotnetbar中的tabstrip用tabcontrol替换

   本人之前本来一直使用dotnetbar2中的tabstrip来实现winform多窗体模式,但是后来发现,在窗体最大后之后,查询datagridview之后打开其它的窗体,总会出现创建句柄失败的bug,无法正常show出窗体,后来经过多方查证相关资料发现,此乃dotnetbar2中的bug,无法解决。不过在不懈努力之下终于找到解决办法,dotnatbar2中的tabcontrol其实有着同样的功能,不同的是tabstrip需要将加载的窗体设置为frm.MdiParent = this;才能达到效果。而tabcontrol类似在panel中动态添加form即可,并且同样也带有关闭标志,完美解决dotnetbar2中的tabstrip的bug。写此文的目的主要是在查找上面出现错误时,发现只有提问人,而没有一个解决方法,希望对遇到同样问题的人有所帮助。
                    TabItem tabItem = tabControl1.CreateTab(frm.Text);
                    TabControlPanel tcp = new TabControlPanel();
                    tabItem.AttachedControl = tcp;
                    tcp.TabItem = tabItem;
                    tcp.Dock = DockStyle.Fill;

                    frm.TopLevel = false;
                    frm.Dock = System.Windows.Forms.DockStyle.Fill;
                    frm.FormBorderStyle = FormBorderStyle.None;
                    frm.Show();
                    tcp.Controls.Add(frm); 
                  
                    tabControl1.Controls.Add(tcp);
                    tabControl1.SelectedTab = tabItem;

上面代码是将form窗体动态加载到tabcontrol中的例子

tabControl1.AutoCloseTabs = true;

tabControl1.CloseButtonOnTabsVisible = true;

此属性是让tabcontrol标签列上显示关闭图标。

tabControl1.AutoHideSystemBox = false;这样就跟tabstrip一样的效果了哦,如图效果!

                /// <summary>
        ///  检查是否已打开某个子窗体
        /// </summary>
        /// <param name="tabName"></param>
        /// <returns></returns>
        private bool IsOpenTab(string tabName)
        {
            bool isOpened = false;

            foreach (TabItem tab in tabControl1.Tabs)
            {
                if (tab.Text.Trim() == tabName.Trim())
                {
                    isOpened = true;
                    tabControl1.SelectedTab = tab;
                    break;
                }
            }
            return isOpened;
        }


  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值