开源组件DockPanelSuite(WeifenLuo.WinFormsUI.Docking)使用心得二:布局

2 篇文章 0 订阅
2 篇文章 0 订阅

 

一、停靠状态 DockState

(1)DockPanelSuite能像VS一样窗口自由停靠和组合,可以通过设置DockState的状态,来改变窗口停靠的位置。

DockState.Unknown未知
DockState.Float浮动
DockState.DockTopAutoHide顶部停靠,自动隐藏
DockState.DockLeftAutoHide左边停靠,自动隐藏
DockState.DockBottomAutoHide底部停靠,自动隐藏
DockState.DockRightAutoHide右边停靠,自动隐藏
DockState.Document文档
DockState.DockTop顶部停靠
DockState.DockLeft左边停靠
DockState.DockBottom底部停靠
DockState.DockRight右边停靠
DockState.Hidden隐藏

通过调用Show(DockPanel dockPanel, DockState dockState),可以设置窗口显示时的停靠状态,不能设置为Unknown和Hidden,并且同一dockPanel或者DockPane里只有Document状态可以设置多次,例如在dockPanel1里设置的多个窗口状态为DockTop就会报错。

Form2是继承自DockContent的窗体,添加如下代码:

 var f2 = new Form2() { TabText = "Document" };
            f2.Show(this.dockPanel1, DockState.Document);
            f2 = new Form2() { TabText = "DockLeft" }; ;
            f2.Show(this.dockPanel1, DockState.DockLeft);
            f2 = new Form2() { TabText = "DockRight" }; ;
            f2.Show(this.dockPanel1, DockState.DockRight);
            f2 = new Form2() { TabText = "DockBottom" }; ;
            f2.Show(this.dockPanel1, DockState.DockBottom);
            f2 = new Form2() { TabText = "DockTop" };
            f2.Show(this.dockPanel1, DockState.DockTop);
            f2 = new Form2() { TabText = "DockLeftAutoHide" }; ;
            f2.Show(this.dockPanel1, DockState.DockLeftAutoHide);
            f2 = new Form2() { TabText = "DockRightAutoHide" };
            f2.Show(this.dockPanel1, DockState.DockRightAutoHide);
            f2 = new Form2() { TabText = "DockBottomAutoHide" };
            f2.Show(this.dockPanel1, DockState.DockBottomAutoHide);
            f2 = new Form2() { TabText = "DockTopAutoHide" } ;
            f2.Show(this.dockPanel1, DockState.DockTopAutoHide);
            Form2= new Form2() { TabText = "Test" };
            Form2.Show(this.dockPanel1, DockState.Float);

窗体显示布局如下:

 

(2)已经显示的窗口仍然可以通过调用Show(DockPanel dockPanel, DockState dockState)改变停靠位置

(3)要按顺序显示一列多文档,可以使用如下

 var doc1 = new Form2() { TabText = "doc1" };
            doc1.Show(this.dockPanel1, DockState.Document);
            var doc2 = new Form2() { TabText = "doc2" };
            doc2.Show(doc1.Pane, null);
            var doc3 = new Form2() { TabText = "doc3" };
            doc3.Show(doc1.Pane, null);

文档按选项卡的形式排列:

二、停靠区域 DockAreas

拖动窗口停靠能够自由停靠固然好,但有时不希望窗口停靠在某个位置,可以通过DockContent.DockAreas来限制拖动停靠的位置。

例如取消窗口的左右停靠

运行拖动窗口,可以看到只能停靠在上下,左右停靠的提示消失了,但是中间嵌套的位置依然能上下左右停靠。

三、禁止拖动 

(1)想禁止整个布局拖动,可以设置属性AllowEndUserDocking来锁定布局

dockPanel.AllowEndUserDocking = false;

(2)如果只想设置某一个窗口不允许拖动,可以设置单个窗口属性DockHandler来锁定窗口

dockContent.DockHandler.AllowEndUserDocking = false;

四、窗口嵌套

窗口是支持多级嵌套的,但是要注意同一级的窗口上能有多个Document状态的窗口,其他状态的窗口只能有一个。

如果不想窗口嵌套可以设置dockPanel属性,设置后窗口只一级,不允许再嵌套。

dockPanel.AllowEndUserNestedDocking=false;

  • 2
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哀歌与世无争

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值