using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraTab; namespace ZL.BidMain.FormBuild
{
public class CreateForm
{ private static Dictionary<string, XtraTabPage> TabPageDic = new Dictionary<string, XtraTabPage>(); private static CreateForm form = null;
private CreateForm(){} static CreateForm()
{
form = new CreateForm();
}
public static CreateForm FormOper
{
get
{
return form;
}
} /// <summary>
/// 新增选项卡页
/// </summary>
/// <param name="tabControl">选项卡控件</param>
/// <param name="tabPageName">当期选项卡页name名称</param>
/// <param name="tabText">当前选项卡页Text标题</param>
/// <param name="newFormName">当前选项卡中的新窗体</param>
public void AddTabpage(XtraTabControl tabControl, string tabPageName, string tabText, string newFormName)
{
if (IsTabpageExsit(tabControl, tabPageName))
{
return;
}
XtraTabPage newPage = new XtraTabPage();
newPage.Name = tabPageName;
newPage.Text = tabText;
newPage.Tooltip = tabPageName;
newPage.Controls.Add(AddNewForm(newFormName));
tabControl.TabPages.Add(newPage);
TabPageDic.Add(tabPageName, newPage);
tabControl.SelectedTabPage = newPage;
} /// <summary>
/// 移除选项卡页
/// </summary>
/// <param name="tabControl"></param>
/// <param name="tabPageName"></param>
/// <param name="e"></param>
public void RemoveTabPage(XtraTabControl tabControl,EventArgs e)
{
DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs args = (DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs)e;
string name = args.Page.Tooltip;
foreach (XtraTabPage item in tabControl.TabPages)
{
if (item.Name==name)
{
tabControl.TabPages.Remove(item);
item.Dispose();
TabPageDic.Remove(name);
return;
}
}
} /// <summary>
/// 判断选项卡是否已经存在
/// </summary>
/// <param name="tabControl">选项卡控件</param>
/// <param name="tabPageName">选项卡名称</param>
/// <returns></returns>
private bool IsTabpageExsit(XtraTabControl tabControl,string tabPageName)
{
foreach (var item in TabPageDic)
{
if (item.Key== tabPageName)
{
tabControl.SelectedTabPage = item.Value;
return true;
}
}
return false;
} /// <summary>
/// 在选项卡中生成窗体
/// </summary>
/// <param name="form">窗体名称</param>
private Form AddNewForm(string formName)
{
Form newForm = (Form)Assembly.GetExecutingAssembly().CreateInstance(formName);
newForm.FormBorderStyle = FormBorderStyle.None;
newForm.TopLevel = false;
//newForm.Parent = ((XtraTabControl)sender).SelectedTabPage;
newForm.ControlBox = false;
newForm.Dock = DockStyle.Fill;
newForm.Visible = true;
return newForm;
}
}
}

动态添加XtraTabControl的page页和子窗体的更多相关文章

  1. jquery-ui-bootstrap动态添加和删除标签页封装【效果更炫】

    1.效果图 2.导入js和css <link rel="stylesheet" href="css/bootstrap/css/bootstrap.min.css& ...

  2. JQuery动态添加多个tab页标签

    jQuery是一个兼容多浏览器的js库,核心理念是write less,do more(写的更少,做的更多),jQuery使用户能更方便地处理HTML documents.events.实现动画效果, ...

  3. EasyUI创建异步树形菜单和动态添加标签页tab

    创建异步树形菜单 创建树形菜单的ul标签 <ul class="easyui-tree" id="treeMenu"> </ul> 写j ...

  4. 动态添加子视图 UIView 的正确方法

    很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...

  5. [转] JQuery UI Tabs 动态添加页签,并跳转到新页签

    [From] https://blog.csdn.net/zhangfeng2124/article/details/76672403 需求: 1.tabs默认只有一个页签,但是需要点击某按钮,动态添 ...

  6. 【iOS开发】动态添加子视图 UIView 的正确方法

    很多时候哥比较喜欢用代码添加视图,特别是要同时加很多UIView时,而且跟 xib 比起来代码更容易管理,在多人的项目中代码不容易 conflict. 但小牛哥最近发现很多新人都不太清楚正确的使用方法 ...

  7. ContextMenuStrip 动态添加多级子菜单

    1.首先要实例化几个ToolStripItem(要为某一父菜单添加几个子菜单就实例化几个):方法如下: /*添加子菜单*/ ToolStripItem ts_1 = new ToolStripMenu ...

  8. ES6面向对象 动态添加标签页

    HTML <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml&quo ...

  9. C#主菜单动态添加子菜单并设置触发事件

    我所使用的是devxepress中的主菜单栏时barsubitem控件,想的是在其能够动态添加子菜单栏并能点击触发事件: /// <summary> /// 创建主按钮的子按钮 /// & ...

随机推荐

  1. 自定义简单的模板引擎-JS模板引擎

    http://www.cnblogs.com/52fhy/p/5393673.html

  2. 晒一晒Jenkins那些常用插件

      Jenkins插件大师 作为CI/CD的调度中心,Jenkins具有十八般武艺,目前已有1700多个插件,功能强大到似乎有点过分了.本文主要列出平时我们常用的插件. 以下这两个网站是Jenkins ...

  3. taro 最佳实践

    对 JSX 支持程度补充说明: 不能在包含 JSX 元素的 map 循环中使用 if 表达式 不能使用 Array#map 之外的方法操作 JSX 数组 不能在 JSX 参数中使用匿名函数 暂不支持在 ...

  4. vue-router 与 react-router 设计理念上的区别

    vue-router 与 react-router 设计理念上的区别: 区别 vue-router react-router 改成history mode: 'history' 直接使用 react- ...

  5. Php文件上传类class.upload.php

    简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮助你快速的给自己的网站集成上传文件功能.不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处 ...

  6. 转 Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

    今早刚上班.客户打电话过来说系统访问不了,输入用户名.用户号不能加载出来!听到这个问题,第一时间想到的是不是服务器重新启动了,Oracle数据库的相关服务没有启动的原因.查看服务的时候,发现相关的服务 ...

  7. java.lang.OutOfMemoryError: Java heap space解决方法 (有问题咨询加微信)

    支付宝扫码领取最高99元红包,到店支付15天,双十二瓜分15亿,打开支付宝首页搜“555176706”领红包,领到大红包的小伙伴赶紧使用哦! //首先检查程序有没有限入死循环 这个问题主要还是由这个问 ...

  8. python打包为独立可执行程序

    linux下 pip install pyinstaller 针对需要的项目 pyinstaller -F -w ./xxx.py 即可

  9. position和float小结

    position属性值 Position的属性值共有四个static.relative.absolute.fixed. static 所有元素在默认的情况下position属性均为static,而我们 ...

  10. JavaScript压缩代码解压缩还原具体办法

    我们知道许多网站都对Javascript代码进行了压缩,但这对开发者和学习者来说,读起来很费劲,本文分享给大家在Chrome浏览器中,如何使用Pretty Print功能反压缩JS代码,让代码更加直观 ...