求问关于WeifenLuo组件的问题(了解的请进)! 本人用WeifenLuo实现了一个窗体的左停靠并可自动隐藏,但是如何让两个窗口都停靠在左边并都能自动隐藏,就好像VS2005的解决方案窗口和属性窗口一样另外WeifenLuo里好像是通过操作一个xml文件来存取窗体状态的,操作的原理有知道的吗?DockContent.Show的七个重载谁能讲讲,都是什么意思? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CSDN不会没人知道吧,不可能,苦等中.... ShowHint = WeifenLuo.WinFormsUI.Docking.DockState.DockLeftAutoHide;下载这个控件的源代码里面有例子的 ShowHint = WeifenLuo.WinFormsUI.Docking.DockState.DockLeftAutoHide; 下载这个控件的源代码里面有例子的 这个我知道,针对某一个单独的窗体的操作还行,但是多个就不行了,很多功能做不出来 1.关于第一个问题通过DockContent.Show重载方法来实现,签名如下,public void Show(DockPane previousPane, DockAlignment alignment, double proportion);这种方式实现是一种多种DockContent对一个DockPane的内嵌情况,第一个参数指明DockPane,DockAlignment 指明排列方式,public enum DockAlignment{ Left, Right, Top, Bottom}第三个参数proportion指明先是界面比例,比如:设置DockAlignment.Bottom,proportion为0.5,那会变成上下显示各占一半空间。下面是我的程序的部分代码,void testMenu2_Click(object sender, EventArgs e) { //throw new NotImplementedException(); //this.Pane.DockTo(this.Pane.DockWindow,null, DockAlignment.Bottom,0.5); if (this.Pane.Contents.Count > 1) { this.Show(this.Pane, DockAlignment.Bottom, 0.5); } //this.ShowHint = DockState.DockBottom; //object o = this; } void testMenu1_Click(object sender, EventArgs e) { if (this.Pane.Contents.Count > 1) { this.Show(this.Pane, DockAlignment.Right, 0.5); } //throw new NotImplementedException(); //Invalid value, check DockableAreas property. //this.ShowHint = DockState.DockRight;//不允许操作。 }是否允许实现自动隐藏,只是设置DockContent的DockState属性而已,当然隐藏也有四个方法四种情况,ShowHint是提示性设置,有时候不一定有用,我的一个程序的部分代码参考,void testMenu1_Click(object sender, EventArgs e)//浮动(&F) { //ToolStripMenuItem item = (ToolStripMenuItem)sender; SetShowHint(); if (this.DockState != DockState.Float) { //this.Show(this.DockPanel, DockState.Float); this.DockState = DockState.Float; } } void testMenu2_Click(object sender, EventArgs e)//可停靠(&K) { //this.DockState = this.ShowHint; SetShowHint(); switch (this.ShowHint) { case DockState.DockLeft: case DockState.DockLeftAutoHide: this.DockState = DockState.DockLeft; break; case DockState.DockRight: case DockState.DockRightAutoHide: this.DockState = DockState.DockRight; break; case DockState.DockTop: case DockState.DockTopAutoHide: this.DockState = DockState.DockTop; break; case DockState.DockBottom: case DockState.DockBottomAutoHide: this.DockState = DockState.DockBottom; break; } } void testMenu3_Click(object sender, EventArgs e)//选项卡式文档 { SetShowHint(); if (this.DockState != DockState.Document) { this.DockState = DockState.Document; } } void testMenu4_Click(object sender, EventArgs e)//自动隐藏(&A) { SetShowHint(); switch (this.DockState) { case DockState.DockLeft: this.DockState = DockState.DockLeftAutoHide; break; case DockState.DockLeftAutoHide: this.DockState = DockState.DockLeft; break; case DockState.DockRight: this.DockState = DockState.DockRightAutoHide; break; case DockState.DockRightAutoHide: this.DockState = DockState.DockRight; break; case DockState.DockTop: this.DockState = DockState.DockTopAutoHide; break; case DockState.DockTopAutoHide: this.DockState = DockState.DockTop; break; case DockState.DockBottom: this.DockState = DockState.DockBottomAutoHide; break; case DockState.DockBottomAutoHide: this.DockState = DockState.DockBottom; break; } } void testMenu5_Click(object sender, EventArgs e)//隐藏 { SetShowHint(); if (this.DockState != DockState.Hidden) { this.Hide(); } } private void SetShowHint() { if (this.DockState != DockState.Unknown && this.DockState != DockState.Document && this.DockState != DockState.Float && this.DockState != DockState.Hidden) { this.ShowHint = this.DockState; } } 2.第二个问题是一个持久化的问题,xml文件只是保存了DockPanel中的DockContent的布局状态,看一下源代码很好理解,通过一个委托来加载配置信息,DockContent是需要另外写代码初始化的,通过委托根据DockContent.GetPersistString()返回的信息来匹配配置信息,方法签名如下:protected virtual string GetPersistString();该方法可以重载,默认的实现为:protected virtual string GetPersistString(){ return base.GetType().ToString();}默认实现缺点很明显,如果同样的DockContent子类会有问题,要解决可以override GetPersistString();xml信息保存的信息应该不难看懂,实例如下,<?xml version="1.0" encoding="utf-8"?><!--DockPanel configuration file. Author: Weifen Luo, all rights reserved.--><!--!!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!!--><DockPanel FormatVersion="1.0" DockLeftPortion="0.245884410558149" DockRightPortion="0.253725224881454" DockTopPortion="0.25" DockBottomPortion="0.25" ActiveDocumentPane="-1" ActivePane="-1"> <Contents Count="4"> <Content ID="0" PersistString="Zhengzuo.DockPanelSuiteTest.LeftToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" /> <Content ID="1" PersistString="Zhengzuo.DockPanelSuiteTest.RightToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" /> <Content ID="2" PersistString="Zhengzuo.DockPanelSuiteTest.BottomToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" /> <Content ID="3" PersistString="Zhengzuo.DockPanelSuiteTest.PropertyForm" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" /> </Contents> <Panes Count="2"> <Pane ID="0" DockState="DockLeft" ActiveContent="3"> <Contents Count="2"> <Content ID="0" RefID="0" /> <Content ID="1" RefID="3" /> </Contents> </Pane> <Pane ID="1" DockState="DockRight" ActiveContent="1"> <Contents Count="2"> <Content ID="0" RefID="1" /> <Content ID="1" RefID="2" /> </Contents> </Pane> </Panes> <DockWindows> <DockWindow ID="0" DockState="Document" ZOrderIndex="0"> <NestedPanes Count="0" /> </DockWindow> <DockWindow ID="1" DockState="DockLeft" ZOrderIndex="1"> <NestedPanes Count="1"> <Pane ID="0" RefID="0" PrevPane="-1" Alignment="Bottom" Proportion="0.5" /> </NestedPanes> </DockWindow> <DockWindow ID="2" DockState="DockRight" ZOrderIndex="2"> <NestedPanes Count="1"> <Pane ID="0" RefID="1" PrevPane="-1" Alignment="Bottom" Proportion="0.5" /> </NestedPanes> </DockWindow> <DockWindow ID="3" DockState="DockTop" ZOrderIndex="3"> <NestedPanes Count="0" /> </DockWindow> <DockWindow ID="4" DockState="DockBottom" ZOrderIndex="4"> <NestedPanes Count="0" /> </DockWindow> </DockWindows> <FloatWindows Count="0" /></DockPanel> 第三个问题DockPanel Suite 最新版本是2.2应该没有七个方法,具体如下,public void Show();public void Show(DockPanel dockPanel);public void Show(DockPane pane, IDockContent beforeContent);public void Show(DockPanel dockPanel, Rectangle floatWindowBounds);public void Show(DockPanel dockPanel, DockState dockState);public void Show(DockPane previousPane, DockAlignment alignment, double proportion);这些方法很难跟你具体的说清楚,真正使用过程中跟其他控件实例有很多关系,下面列出一些情况,楼主应该不难理解。Form.IsMdiContainer;DockPanel.DocumentStyle;DockPane.Contents;DockContent.DockAreas;DockContent.DockState;DockContent.DockPanel;设置不同的相关属性都会影响Show方法,而且设置不当,有些Show方法会抛出异常,通过看源代码可以掌握这些情况,源代码比较简洁。 都停靠一边的话只要把多个放到一边就行啊//f4.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft;//f5.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft; propertyWindow.Show(dockPanel,DockState.DockLeftAutoHide); 了解下weifenluo,做窗体正好要用到 【求助】C#中对XML中某个节点修改后SAVE了,但并没有更新文件 火炬网络传递开始啦!Handing on the torch online begins ???? 前途无亮贴,郁闷并散分着(建议性回答可酌情给分) 问个很菜的问题~~ DataSet中数据排序的问题 急招.net项目经理 如何清除DataGrid里面的记录? 散分了,请高手分析代码!!!在线等!!!十万火急! 这样的功能如何实现?回答问题的都给分! 请教一下,C#中可以在后台访问一个网址地址,并取得返回值吗 怎么使vs2008关联到dll的源代码??
下载这个控件的源代码里面有例子的
下载这个控件的源代码里面有例子的 这个我知道,针对某一个单独的窗体的操作还行,但是多个就不行了,很多功能做不出来
通过DockContent.Show重载方法来实现,签名如下,
public void Show(DockPane previousPane, DockAlignment alignment, double proportion);
这种方式实现是一种多种DockContent对一个DockPane的内嵌情况,第一个参数指明DockPane,DockAlignment 指明排列方式,
public enum DockAlignment
{
Left,
Right,
Top,
Bottom
}第三个参数proportion指明先是界面比例,比如:设置DockAlignment.Bottom,proportion为0.5,那会变成上下显示各占一半空间。
下面是我的程序的部分代码,void testMenu2_Click(object sender, EventArgs e)
{
//throw new NotImplementedException();
//this.Pane.DockTo(this.Pane.DockWindow,null, DockAlignment.Bottom,0.5);
if (this.Pane.Contents.Count > 1)
{
this.Show(this.Pane, DockAlignment.Bottom, 0.5);
}
//this.ShowHint = DockState.DockBottom;
//object o = this;
} void testMenu1_Click(object sender, EventArgs e)
{
if (this.Pane.Contents.Count > 1)
{
this.Show(this.Pane, DockAlignment.Right, 0.5);
}
//throw new NotImplementedException();
//Invalid value, check DockableAreas property.
//this.ShowHint = DockState.DockRight;//不允许操作。
}是否允许实现自动隐藏,只是设置DockContent的DockState属性而已,当然隐藏也有四个方法四种情况,ShowHint是提示性设置,有时候不一定有用,我的一个程序的部分代码参考,void testMenu1_Click(object sender, EventArgs e)//浮动(&F)
{
//ToolStripMenuItem item = (ToolStripMenuItem)sender;
SetShowHint();
if (this.DockState != DockState.Float)
{
//this.Show(this.DockPanel, DockState.Float);
this.DockState = DockState.Float;
}
}
void testMenu2_Click(object sender, EventArgs e)//可停靠(&K)
{
//this.DockState = this.ShowHint;
SetShowHint();
switch (this.ShowHint)
{
case DockState.DockLeft:
case DockState.DockLeftAutoHide:
this.DockState = DockState.DockLeft;
break;
case DockState.DockRight:
case DockState.DockRightAutoHide:
this.DockState = DockState.DockRight;
break;
case DockState.DockTop:
case DockState.DockTopAutoHide:
this.DockState = DockState.DockTop;
break;
case DockState.DockBottom:
case DockState.DockBottomAutoHide:
this.DockState = DockState.DockBottom;
break;
}
}
void testMenu3_Click(object sender, EventArgs e)//选项卡式文档
{
SetShowHint();
if (this.DockState != DockState.Document)
{
this.DockState = DockState.Document;
}
} void testMenu4_Click(object sender, EventArgs e)//自动隐藏(&A)
{
SetShowHint();
switch (this.DockState)
{
case DockState.DockLeft:
this.DockState = DockState.DockLeftAutoHide;
break;
case DockState.DockLeftAutoHide:
this.DockState = DockState.DockLeft;
break;
case DockState.DockRight:
this.DockState = DockState.DockRightAutoHide;
break;
case DockState.DockRightAutoHide:
this.DockState = DockState.DockRight;
break;
case DockState.DockTop:
this.DockState = DockState.DockTopAutoHide;
break;
case DockState.DockTopAutoHide:
this.DockState = DockState.DockTop;
break;
case DockState.DockBottom:
this.DockState = DockState.DockBottomAutoHide;
break;
case DockState.DockBottomAutoHide:
this.DockState = DockState.DockBottom;
break;
}
}
void testMenu5_Click(object sender, EventArgs e)//隐藏
{
SetShowHint();
if (this.DockState != DockState.Hidden)
{
this.Hide();
}
} private void SetShowHint()
{
if (this.DockState != DockState.Unknown && this.DockState != DockState.Document && this.DockState != DockState.Float && this.DockState != DockState.Hidden)
{
this.ShowHint = this.DockState;
}
}
是一个持久化的问题,xml文件只是保存了DockPanel中的DockContent的布局状态,看一下源代码很好理解,通过一个委托来加载配置信息,DockContent是需要另外写代码初始化的,通过委托根据
DockContent.GetPersistString()返回的信息来匹配配置信息,方法签名如下:
protected virtual string GetPersistString();
该方法可以重载,默认的实现为:
protected virtual string GetPersistString()
{
return base.GetType().ToString();
}
默认实现缺点很明显,如果同样的DockContent子类会有问题,要解决可以override GetPersistString();
xml信息保存的信息应该不难看懂,实例如下,<?xml version="1.0" encoding="utf-8"?>
<!--DockPanel configuration file. Author: Weifen Luo, all rights reserved.-->
<!--!!! AUTOMATICALLY GENERATED FILE. DO NOT MODIFY !!!-->
<DockPanel FormatVersion="1.0" DockLeftPortion="0.245884410558149" DockRightPortion="0.253725224881454" DockTopPortion="0.25" DockBottomPortion="0.25" ActiveDocumentPane="-1" ActivePane="-1">
<Contents Count="4">
<Content ID="0" PersistString="Zhengzuo.DockPanelSuiteTest.LeftToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="1" PersistString="Zhengzuo.DockPanelSuiteTest.RightToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="2" PersistString="Zhengzuo.DockPanelSuiteTest.BottomToolWindow" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
<Content ID="3" PersistString="Zhengzuo.DockPanelSuiteTest.PropertyForm" AutoHidePortion="0.25" IsHidden="False" IsFloat="False" />
</Contents>
<Panes Count="2">
<Pane ID="0" DockState="DockLeft" ActiveContent="3">
<Contents Count="2">
<Content ID="0" RefID="0" />
<Content ID="1" RefID="3" />
</Contents>
</Pane>
<Pane ID="1" DockState="DockRight" ActiveContent="1">
<Contents Count="2">
<Content ID="0" RefID="1" />
<Content ID="1" RefID="2" />
</Contents>
</Pane>
</Panes>
<DockWindows>
<DockWindow ID="0" DockState="Document" ZOrderIndex="0">
<NestedPanes Count="0" />
</DockWindow>
<DockWindow ID="1" DockState="DockLeft" ZOrderIndex="1">
<NestedPanes Count="1">
<Pane ID="0" RefID="0" PrevPane="-1" Alignment="Bottom" Proportion="0.5" />
</NestedPanes>
</DockWindow>
<DockWindow ID="2" DockState="DockRight" ZOrderIndex="2">
<NestedPanes Count="1">
<Pane ID="0" RefID="1" PrevPane="-1" Alignment="Bottom" Proportion="0.5" />
</NestedPanes>
</DockWindow>
<DockWindow ID="3" DockState="DockTop" ZOrderIndex="3">
<NestedPanes Count="0" />
</DockWindow>
<DockWindow ID="4" DockState="DockBottom" ZOrderIndex="4">
<NestedPanes Count="0" />
</DockWindow>
</DockWindows>
<FloatWindows Count="0" />
</DockPanel>
DockPanel Suite 最新版本是2.2应该没有七个方法,具体如下,public void Show();
public void Show(DockPanel dockPanel);
public void Show(DockPane pane, IDockContent beforeContent);
public void Show(DockPanel dockPanel, Rectangle floatWindowBounds);
public void Show(DockPanel dockPanel, DockState dockState);
public void Show(DockPane previousPane, DockAlignment alignment, double proportion);这些方法很难跟你具体的说清楚,真正使用过程中跟其他控件实例有很多关系,下面列出一些情况,楼主应该不难理解。
Form.IsMdiContainer;
DockPanel.DocumentStyle;
DockPane.Contents;
DockContent.DockAreas;
DockContent.DockState;
DockContent.DockPanel;
设置不同的相关属性都会影响Show方法,而且设置不当,有些Show方法会抛出异常,通过看源代码可以掌握这些情况,源代码比较简洁。
//f4.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft;
//f5.DockAreas = WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft;
propertyWindow.Show(dockPanel,DockState.DockLeftAutoHide);