动态添加dotNetBarManager的dockSite
来源:互联网 发布:大数据解决方案 编辑:程序博客网 时间:2024/06/03 19:50
先在设计界面(我这里用的用户控件)添加控件dotNetBarManager控件
如图所示点击Enaable Docunment Docking
会变成下图
然后打开对应的.Designer.cs文件,主要关注this.dotNetBarManager1.FillDockSite的那个dockSite。
注释掉有下划线的两行代码(动态加载就是用这两行代码),或者在设计界面选中bar1删除,都能使用户控件的设计界面回到第一副图所示。
代码如下
private void DockSitePanel_Load(object sender, EventArgs e) { //初始先加载3个bar Bar bar1; Bar bar2; Bar bar3; UserControl1 control1 = new UserControl1();//随手拖的简单用户控件 bar1 = createBar(control1, "bar1", false); UserControl2 control2 = new UserControl2();//随手拖的简单用户控件 bar2 = createBar(control2, "bar2", false); UserControl3 control3 = new UserControl3();//随手拖的简单用户控件 bar3 = createBar(control3, "bar3", false); //下面的代码就是再.Designer.cs里删掉的代码 this.dockSite9.Controls.Add(bar1);//将bar加入dockSite this.dockSite9.Controls.Add(bar2); this.dockSite9.Controls.Add(bar3); //给3个bar排列位置 this.dockSite9.DocumentDockContainer = new DocumentDockContainer(new DocumentBaseContainer[] { (new DocumentBarContainer ( bar1 ) ), (new DocumentDockContainer ( new DocumentBaseContainer[] { (new DocumentBarContainer ( bar2 ) ), (new DocumentBarContainer ( bar3 ) ) }, eOrientation.Vertical ) ) }, eOrientation.Horizontal); this.dockSite9.RecalcLayout(); }
bar都是随手拖的简单用户控件,如
具体讲一下给bar排列位置
//给两个bar水平排列如下new DocumentDockContainer(new DocumentBaseContainer[] {(new DocumentBarContainer(bar1)), (new DocumentBarContainer(bar2))}, eOrientation.Horizontal)//两个bar垂直排列如下new DocumentDockContainer(new DocumentBaseContainer[] {(new DocumentBarContainer(bar2)), (new DocumentBarContainer(bar3))}, eOrientation.Vertical)//用两个bar垂直排列的代码去替换两个bar水平排列代码中DocumentBaseContainer[]{}的new DocumentBarContainer(bar2)部分,就得到this.dockSite9.DocumentDockContainer = new DocumentDockContainer(new DocumentBaseContainer[] { (new DocumentBarContainer ( bar1 ) ), (new DocumentDockContainer ( new DocumentBaseContainer[] { (new DocumentBarContainer ( bar2 ) ), (new DocumentBarContainer ( bar3 ) ) }, eOrientation.Vertical ) ) }, eOrientation.Horizontal);
排列效果如下
剩下的代码如下,标记*的是这几个控件的关系,也是在.Designer.cs里能参考的
private Bar createBar(Control control, string titleName = null, bool canClose = true) { PanelDockContainer newPdc = new PanelDockContainer() DockContainerItem newDci = new DockContainerItem(); Bar bar = new Bar(); //设置几个的属性,先在设计界面添加bar后从.Designer.cs把代码Copy过来,也就相差不多了 InitializePDC(newPdc);//设置PanelDockContainer的属性 control.Dock = DockStyle.Fill; newPdc.Controls.Add(control);//control是真正要显示的内容 InitializeDCI(newDci);//设置DockContainerItem的属性 if (!string.IsNullOrEmpty(titleName)) newDci.Text = titleName; newDci.Control = newPdc;//*** if (!canClose) newDci.CanClose = eDockContainerClose.No; else newDci.CanClose = eDockContainerClose.Yes; InitializeBar(bar);//设置bar的属性 bar.Text = titleName; bar.Controls.Add(newPdc);//*** bar.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] { newDci });//*** return bar; }
private void InitializePDC(PanelDockContainer newPdc) { newPdc.ColorSchemeStyle = eDotNetBarStyle.Office2007; newPdc.Name = Guid.NewGuid().ToString(); newPdc.Style.Alignment = StringAlignment.Center; newPdc.Style.BackColor1.ColorSchemePart = eColorSchemePart.BarBackground; newPdc.Style.BackColor2.ColorSchemePart = eColorSchemePart.BarBackground2; newPdc.Style.BorderColor.ColorSchemePart = eColorSchemePart.BarDockedBorder; newPdc.Style.ForeColor.ColorSchemePart = eColorSchemePart.ItemText; newPdc.Style.GradientAngle = 90; newPdc.TabIndex = 0; newPdc.AllowDrop = false; } private void InitializeDCI(DockContainerItem newDci) { newDci.Name = Guid.NewGuid().ToString(); newDci.Text = ""; } private void InitializeBar(Bar bar) { bar.AlwaysDisplayDockTab = true;//Indicates whether tab that shows all dock containers on the bar is visible all the time. bar.CanCustomize = false; bar.CanDockBottom = true; bar.CanDockDocument = true; bar.CanDockLeft = true; bar.CanDockRight = true; bar.CanDockTop = true; bar.CanHide = true; bar.CanUndock = true; bar.ShowToolTips = true; bar.IsHandleDoubleClickExternal = true; bar.Stretch = true;//Specifies whether Bar will stretch to always fill the space in dock site. bar.TabNavigation = true; bar.TabStop = true; bar.AccessibleRole = System.Windows.Forms.AccessibleRole.ToolBar; // bar.MinimumSize = new Size(300, 200);//要想无限加bar就不能设置最小值,否则bar加多了显示会有问题 bar.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;//Gets or sets the dock tab alignment. bar.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer; bar.Style = eDotNetBarStyle.Office2007; }
这些属性比较多,可以自己依次更改属性值Debug看一下效果。
最后再加一个创建bar的publick方法
public void addBar(Control control, Point point, string name = null) { Bar bar; bar = createBar(control, name); dotNetBarManager1.Bars.Add(bar); bar.MinimumSize = new Size(300, 200);//先给个MinimumSize,show出来,后面再加MinimumSize== Size.Empty int x = (int)(point.X + this.Location.X + (this.Width - bar.Width) / 2); int y = (int)(point.Y + this.Location.Y + (this.Height - bar.Height) / 2); Point location = new Point() { X = x, Y = y }; dotNetBarManager1.Float(bar, location);//新建bar出现的位置 bar.RecalcLayout(); bar.MinimumSize = Size.Empty; }
在Form里拖入写好的这个用户控件,再拖入一个按钮,按钮方法为
public void addBar(Control control, Point point, string name = null) { Bar bar; bar = createBar(control, name); dotNetBarManager1.Bars.Add(bar); bar.MinimumSize = new Size(300, 200);//先给个MinimumSize,show出来,后面再加MinimumSize== Size.Empty int x = (int)(point.X + this.Location.X + (this.Width - bar.Width) / 2); int y = (int)(point.Y + this.Location.Y + (this.Height - bar.Height) / 2); Point location = new Point() { X = x, Y = y }; dotNetBarManager1.Float(bar, location);//新建bar出现的位置 bar.RecalcLayout(); bar.MinimumSize = Size.Empty; }
运行后点击按钮如图
bar都可以随意拖动,如图
阅读全文
0 0
- 动态添加dotNetBarManager的dockSite
- 使用DotNetBar的DotNetBarManager要注意事项
- DotNetBar中dotNetBarManager设置窗口停靠布局的技巧
- WebControl的动态添加
- WebControl的动态添加
- 动态的添加消息
- WebControl的动态添加
- 行的动态添加
- Fragment的动态添加
- 表格的动态添加
- Fragment的静态添加和动态添加
- 控件的动态添加步骤以及动态事件的添加
- 动态添加行的javascript
- 动态添加TREEVIEW的节点
- 动态添加treeview的节点
- 动态添加 DataGrid 的列
- 动态添加SiteMapPath的方法
- 动态添加 DataGrid 的列
- WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform问题解决
- docker相关概念
- 洛谷P1525 关押罪犯
- Angular4+NodeJs+MySQL 入门-04 接口调用类
- UVA 10328 , ZOJ 3747 (DP 递推)
- 动态添加dotNetBarManager的dockSite
- Dockers Swarm介绍
- Android 2分钟刷Android 8.0系统 和 8.0适配 完美方案
- Toast初识
- hibernate实体类注解配置
- excel操作 System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800AC472
- HUD-2046(递推)
- (Java/.net)字符串在一个字符串中出现的次数
- Android手机如何查看log日志