• 热门专题

winform dotnetbar中的tabstrip用tabcontrol替换

作者:fuqiang19871117的专栏  发布日期:2011-07-26 15:33:42
Tag标签: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;  
                tabtabControl1.SelectedTab = tab;  
                break;  
            }  
        }  
        return isOpened;  
    }  
    
About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规