[]DockPanel用法 
2010-01-28 00:06:13|  分类: 默认分类标签: |字号大中小 订阅
 
dockpanel中提供了几个可用的类, 重要的有两个, 一是DockPanel, 一是DockContent,
DockPanel是从panel继承出来的, 用于提供可浮动的dock的子窗口进行浮动和dock的场所,
DockContent是从form类中继承出来的, 用于提供可浮动的窗口基类. 就是说: DockContent对象可以在DockPanel对象中任意贴边, 浮动, TAB化等.
WeiFenLuo.winFormsUI.Docking.dll的使用
1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1
2.引用—>添加引用—>浏览—>weiFenLuo.winFormsUI.Docking.dll
3.窗体属性IsMdiContainer设置为True
4.工具箱—>右键—>选择项—>组件—>浏览—>weiFenLuo.winFormsUI.Docking.dll—>在工具箱出现dockPanel
5.dockPanel拖到窗体Form1上,设置Dock属性,我设置的是:Fill
停靠窗体:
1.新建一个WinForm窗体Form2
2.在代码中修改窗体继承于DockContent
    public partial class Form2 : DockContent
    {
        Form1 form1;
        private DockPanel dp;
        public Form2()
        {
            InitializeComponent();
        }
        public Form2(Form1 fm1)
        {
            form1 = fm1;
            dp = (DockPanel)form1.Controls["dockPanel1"];
        }
    }
3.在主窗体Form1中显示停靠窗体。
private void Form1_Load(object sender, EventArgs e)
{
  Form2 form2 = new Form2();
  form2.Show(this.dockPanel1, DockState.DockLeft);
}
dockpanel中其他几个类
DockWindow:用来划分dockpanel.
          在一个DockPanel上面还有几个DockWindowDockPanel分成了几块. 默认DockPanelDockWindow创建了五个区域, 分别是DockTop, DockBottom, DockLeft, DockRightDocument, 任何一个DockPane都棣属于这五个区域中的某一个. DockPanel就是通过DockWindow来管理DockPane的所在位置的.
DockPane:
          DockPanelSuit的一个基本显示单元, 最终用户看到的UI都是由DockPane组合而来的
FloatWindow:
        事实上, FloatWindowDockPane是同等的, 只不过DockPane是附在DockWindow, FloatWindow是一个浮动窗口而已. 显然, FloatWindow是一个Form, DockPanel管理着FloatWindowDockPane之间的转换, 而这个转换过程也无非就是把DockContentFloatWindow转到DockPane, 或者把DockContentDockPane转到FloatWindow, 然后显示出来
DockPanel的使用
分类: .Net 2008 WinForm 开发 2009-12-03 14:38 1157人阅读 评论(0) 收藏 举报
DockPanel的使用
2009-12-03
 
 
1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1
 
2.引用—>添加引用—>浏览—>weiFenLuo.winFormsUI.Docking.dll
 
3.设置Form1窗体属性IsMdiContainer:True
 
4.工具箱—>右键—>选择项—>组件—>浏览—>weiFenLuo.winFormsUI.Docking.dll—>在工具箱出现dockPanel
 
5.dockPanel拖到窗体Form1上,设置Dock属性,我设置的是:Fill
 
停靠窗体:
1.新建一个WinForm窗体Form2
 
2.在代码中修改窗体继承于DockContent
 
using WeifenLuo.WinFormsUI.Docking;
public partial class Form2 : DockContent
 
3.在主窗体Form1中显示停靠窗体。
private void Form1_Load(object sender, EventArgs e)
{
  Form2 form2 = new Form2();
  form2.Show(this.dockPanel1);
}
 
如果dockPanel嵌套在另1个容器控件上(如:panel),将dockPanel属性DocumentStyle设置为:DockingWindow/DockingSdi
Dockpanel 使用技巧
分类: C# 2012-01-31 22:33 33人阅读 评论(0) 收藏 举报
DockPanel的基本使用 我就不说了,网上很多,我想说的是在使用DockPanel 需要注意的几个小问题
第一个:
使用过DockPanel的人,都有可能会遇到这样一个错误:
Invalid Content: ActiveContent must be one of the visible contents, or null if there is no visible content.
翻译过来的意思大致是:无效的内容: 如果没有一个可见的内容,ActiveContent必须是可见的内容或空。
具体是什么原因,大家可以相互探讨下。下面我说说出现这个问题的几种情况
代码中的this关键字代表的就是Dockpanel所在的窗体为Form1
1)、当DockpanelDocumentStyle不为DockingMdi时,以下代码会出现这个问题     
      Frm_A frmA = null;
      //判断子窗体中是否已经存在在DockPanel
      foreach (DockContent frm in this.dockPanel1.Contents)
        {
            if (frm is Frm_A)
              {
                    frm.Activate();    //激活子窗体
                    return;
              }
            }
            frmA = new Frm_A();
            frmA.MdiParent = this;
            frmA.Show(this.dockPanel1);
        解决方案:看你设置DockpanelDocumnetStyle是否为DockingMdi。大家也可以试试其他几种方式(DockingWindow,DockingSdi,SystemMdi)
2)、设置了DockpanelDocumentStyle不为DockingMdi时,如果你想要设置窗体Frm_B为左边浮动窗体,需要设置窗体Frm_BDockAreas为且仅为DockLeft,如果想要实现其他功能可自行去设置其他属性信息,现在请看下面代码
            Frm_B frmB = null;
            //判断子窗体中是否已经存在在DockPanel
            foreach (DockContent frm in this.dockPanel1.Contents)
            {
                if (frm is Frm_B)
                {
                    frm.Activate();    //激活子窗体
                    return;
                }
            }
            frmB = new Frm_B();
          //frmB.MdiParent = this;
            frmB.Show(this.dockPanel1,DockState.DockLeft);
            注意,如果你在你的代码中加了红注释的代码,那么程序运行时 也会报上面的那个错
            解决方案:注释红的代码。
            原因:(个人理解)frmB.Show(this.dockPanel1,DockState.DockLeft);这句代码其实就设置了frmB只停靠在DockPanel左边,此时的frmB是不属于MDI子窗体的,所以一旦你加入红的代码,程序就会报错。
第二个:
拖动、停靠、固定子窗体(显示在Dockpanel)
拖动:如果你想使你的子窗体可以任意拖动,那么你在设置子窗体的DockAreas属性时,保持默认值,不要修改。
停靠:首先你需设置DockAreas的位置,可以停靠在左、右、下等,也可以通过程序代码控制,参考上面代码。
固定:只需设置你窗体的DockAreasDocument就行了
第三个:
子窗体和Contents的判断
很多时候你需要判断Dockpanel中存在多少个子窗体或Contents,请参考下面代码:
foreach(Form in this.MdiChildren)
{
      //这样判断时,停靠的窗体是不会计算在内的
}
foreach (DockContent frm in this.dockPanel1.Contents)
{
    //这样设置后,所有的继承与DockContent的窗体都会被计算在内的
}网络上xml是什么意思
第四个:
寻主窗体、动态显示子窗体
参考图:
实现的功能:这里我们需要实现,右键点击A窗体,通过右键菜单来显示窗体B
  //主窗体的对象
  Form1 form1;
private void showB_Click(object senders, EventArgs e)
{
          GetFrmMain();  //通过此函数来获取form1     
          foreach (Form frm in form1.MdiChildren)
            {
                if (frm is Frm_B)
                {
                    frm.Activate();
                    return;
                }
            }
            Frm_B frmB = new Frm_B(this);
            frmB.MdiParent = form1;
            frmB.Show(form1.dockPanel1);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。