直接上代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TD.SandDock; namespace SalesClient
{
public partial class frmContainer : Form
{
public static frmContainer Open;
public frmContainer()
{
InitializeComponent();
frmContainer.Open = this;
} Sys.AutoSizeFormClass asc = new SalesClient.Sys.AutoSizeFormClass();
/// <summary>
/// 根据传来的窗口变量参数,打开一个窗口到sandDock(单件模式)
/// </summary>
/// <param name="tempFrm"></param>
public void OpenForm_SandDockSingle(Form tempFrm)
{
if (checkFrm(tempFrm.Name))
{
return;
} TabbedDocument newWin = new TabbedDocument();
newWin.Name = tempFrm.Name;
newWin.Text = tempFrm.Text; newWin.Manager = sandDockManager1;
newWin.CloseAction = DockControlCloseAction.Dispose;
WindowOpenMethod openMethod = (WindowOpenMethod)(2); tempFrm.Load += new EventHandler(tempFrm_Load);
tempFrm.SizeChanged += new EventHandler(tempFrm_SizeChanged); tempFrm.TopLevel = false;
tempFrm.Show(); tempFrm.Parent = newWin;
tempFrm.Dock = DockStyle.Fill;
tempFrm.FormBorderStyle = FormBorderStyle.None;
newWin.Open(openMethod); } private void tempFrm_Load(object sender, EventArgs e)
{
Form frm = sender as Form; asc.Initialize(frm);
} private void tempFrm_SizeChanged(object sender, EventArgs e)
{
Form frm = sender as Form;
asc.ReSize(frm);
} /// <summary>
/// 根据传来的窗口变量参数,打开一个窗口到sandDock(单件模式,关闭以前的)
/// </summary>
/// <param name="tempFrm"></param>
public void OpenForm_SandDockSingleOrClose(Form tempFrm)
{
checkFrmOrClose(tempFrm.Name); TabbedDocument newWin = new TabbedDocument();
newWin.Name = tempFrm.Name;
newWin.Text = tempFrm.Text;
//newWin.AutoScroll = true; newWin.Manager = sandDockManager1;
newWin.CloseAction = DockControlCloseAction.Dispose;
WindowOpenMethod openMethod = (WindowOpenMethod)(2); tempFrm.TopLevel = false;
tempFrm.Parent = newWin;
//tempFrm.Owner = this;
tempFrm.Dock = DockStyle.Fill;
//tempFrm.WindowState = FormWindowState.Maximized;
tempFrm.FormBorderStyle = FormBorderStyle.None;
tempFrm.Show(); newWin.Open(openMethod); }
/// <summary>
/// 根据传来的窗口变量参数,打开一个窗口到sandDock(非单件模式)
/// </summary>
/// <param name="tempFrm"></param>
public void OpenForm_SandDock(Form tempFrm)
{
try
{
TabbedDocument newWin = new TabbedDocument();
newWin.Name = tempFrm.Name;
newWin.Text = tempFrm.Text;
// newWin.AutoScroll = true; newWin.Manager = sandDockManager1;
newWin.CloseAction = DockControlCloseAction.Dispose;
WindowOpenMethod openMethod = (WindowOpenMethod)(2); tempFrm.TopLevel = false;
tempFrm.Parent = newWin;
//tempFrm.Owner = this;
tempFrm.Dock = DockStyle.Fill;
// tempFrm.Left = (newWin.Width - tempFrm.Width) / 2+newWin.Left;
//tempFrm.WindowState = FormWindowState.Maximized;
tempFrm.FormBorderStyle = FormBorderStyle.None;
tempFrm.Show(); newWin.Open(openMethod);
}
catch (Exception)
{
MessageBox.Show("加载窗体(sandDock)出现错误", "窗体加载到sanddock", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 窗体单件模式
/// </summary>
/// <param name="strFrm"></param>
/// <returns></returns>
private bool checkFrm(string strFrm)
{
bool boolRet = false;
foreach (TabbedDocument aa in sandDockManager1.Documents)
{
if (aa is TabbedDocument && ((TabbedDocument)aa).Name == strFrm)
{
((TabbedDocument)aa).Activate();
boolRet = true;
}
}
return boolRet;
}
/// <summary>
/// 窗体的单件模式(关闭以前窗体)
/// </summary>
/// <param name="strFrmName"></param>
private void checkFrmOrClose(string strFrmName)
{
foreach (TabbedDocument aa in sandDockManager1.Documents)
{
if (aa is TabbedDocument && ((TabbedDocument)aa).Name == strFrmName)
{
((TabbedDocument)aa).Close();
}
}
}
}
}

在FormLoad 里

private void FormMain_Load(object sender, EventArgs e)
{
MethodInvoker mi = new MethodInvoker(InvokeMethod);
this.BeginInvoke(mi);
} private void InvokeMethod()
{
frmContainer sanddock = new frmContainer();
sanddock.TopLevel = false;
sanddock.FormBorderStyle = FormBorderStyle.None;
sanddock.Dock = DockStyle.Fill;
//sanddock.Width = this.spcMain.Panel2.Width;
//sanddock.Height = this.spcMain.Panel2.Height;
sanddock.AutoScroll = true;
this.spcMain.Panel2.Controls.Clear();
this.spcMain.Panel2.Controls.Add(sanddock);
sanddock.Show();
}

效果图

SandDock 应用示例的更多相关文章

  1. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  2. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  3. 通过Jexus 部署 dotnetcore版本MusicStore 示例程序

    ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...

  4. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  5. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例

    一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...

  6. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  7. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

  8. Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...

  9. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

随机推荐

  1. Linux内核系列—C语言中内嵌汇编 asm __volatile__,asm__volatile_【转】

    转自:http://www.bkjia.com/Androidjc/1109412.html 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器, ...

  2. Android开发实例详解之IMF(Android SDK Sample—SoftKeyboard)

    本博前面的文章介绍了Android开发环境的搭建和模拟器的常用操作.本次,将以Android Sample中经典的SoftKeyboard项目为例,详细解析Android上一个小型项目的开发过程和注意 ...

  3. POJ-3187 Backward Digit Sums (暴力枚举)

    http://poj.org/problem?id=3187 给定一个个数n和sum,让你求原始序列,如果有多个输出字典序最小的. 暴力枚举题,枚举生成的每一个全排列,符合即退出. dfs版: #in ...

  4. grunt <% %>模板和使用配置文件

        使用<% %>分隔符指定的模板会在任务从它们的配置中读取相应的数据时将自动扩展扫描.模板会被递归的展开,直到配置中不再存在遗留的模板相关的信息(与模板匹配的).    整个配置对象 ...

  5. USACO全部测试数据

    链接:http://share.weiyun.com/8c37d26066ee9e63147d2af983f24290 密码:YyGL 请使用2345好压解压.

  6. (转载) jQuery 页面加载初始化的方法有3种

    jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...

  7. HDU 5316 Magician (线段树,单值修改,微变形)

    题意:给一个初始序列A[1,n],第j个数字代表精灵j的power值,有两种操作:(1)查询区间[L,R] (2)修改某个精灵的power值. 但,查询的是区间[L,R]中一个美丽子序列sub[l,r ...

  8. 学习opengl(起步)

    库可以在这里下载 第一个程序: #ifndef GLUT_DISABLE_ATEXIT_HACK #define GLUT_DISABLE_ATEXIT_HACK #endif #include &l ...

  9. MySQL多表连接

    主要分3种:内连接,外连接,交叉连接 其        他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 =  或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...

  10. 【解题报告】POJ-1108 Split Windows

    原题地址:http://poj.org/problem?id=1108 ============================== 题目大意: 一棵树表示一个窗口,它的叶子节点都是大写字母,非叶子节 ...