/// <summary>
/// 根据窗体Name打开窗体
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Form FindForm(string name)
{
Assembly assembly = Assembly.GetExecutingAssembly();
// 实例化窗体
Form form = assembly.CreateInstance(DBConfig.GetConfigValue("Namespace") + name) as Form;
return form;
}

/// <summary>
/// 左侧菜单树点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Tag != null)
{

Form FormChild = FindForm(e.Node.Tag.ToString());

if (FormChild != null)
{
ShowChildForm(FormChild);
}
//else
//{
// MessageBoxEx.Show("当前窗体不存在");
//}
}

}

/// <summary>
/// 窗体切换
/// </summary>
/// <param name="form"></param>
private void ShowChildForm(Form form)
{
if (!FindTabPageForm(form.Name))
{
//获取能打开的窗体数
int sysTabPageNum =T2THelper.ToInt32(DBConfig.GetConfigValue("sysTabpageNum"), 5);
if (sysTabPageNum > tabControl1.TabPages.Count)
{
TabPage tp = new TabPage();
//将form的名称给tabpage
tp.Name = form.Name;
tp.Text = form.Text;
tabControl1.TabPages.Add(tp);
tabControl1.SelectedTab = tp;
form.FormBorderStyle = FormBorderStyle.None;
form.MdiParent = this;
//这比较关键,给出窗体的父容器为tabpage
form.Parent = tp;
form.Dock = DockStyle.Fill;
form.Show();
}
else
{
MessageBoxEx.Show("您好\r\n只能同时打开" + sysTabPageNum.ToString() + "个窗口,请关于其他窗口后再打开", "提醒");
}
}
else
{
tabControl1.SelectedTab = GetTabPageForm(form.Name);
}

}

/// <summary>
/// 判断TabPage是否已经打开
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public bool FindTabPageForm(string name)
{
foreach (TabPage tp in tabControl1.TabPages)
{
if (name == tp.Name)
{
return true;
}
}
return false;
}

示例图

最新文章

  1. 信息安全系统设计基础实验四 20135210&amp;20135218
  2. Substance风格实例大全javaswing皮肤风格大全(原)
  3. 5.4.2 使用配置启动firefox
  4. VB中的GDI编程-2 画笔
  5. PCI和PCIE插槽有什么区别?
  6. MySQL 视图技术
  7. 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。
  8. centos7最小化安装系统
  9. Android事件分发流程总结
  10. Spring使用原生JDBC
  11. c#之如何操作excel
  12. What is event bubbling and capturing?
  13. Delphi实现软件中登录用户的操作权限
  14. socket 长连接
  15. js类型判断的方法
  16. lnmp之nginx1.10.2安装
  17. 免费获取 Kaspersky Small Office Security 90 天授权
  18. 在Asp.Net Core中取得物理路径
  19. myBatis + SpringMVC上传、下载文件
  20. date &quot;+Y-%m-%d %H:%M&quot;

热门文章

  1. 08 安装虚拟机:Windows 10
  2. HDLbits——Mt2015 lfsr
  3. .net基础—多线程(二)
  4. 计数 dp 部分例题(十一~十五部分)
  5. Rancher v2.4.8 容器管理平台-集群搭建(基于k8s)
  6. vue验证码倒计时60s
  7. mac中Mysql各种版本下载
  8. CVPixelBufferRef
  9. linux清除日志和文件缓存
  10. vue 封装时间格式化和number精确度