haoxiaobo

从C到C++又到.net, 有一些心得, 和大家交流下...
posts - 34, comments - 216, trackbacks - 1, articles - 6
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

这个控件不错, 可以很方便地实现如vs 2003里那种窗口定位, 浮动, dock, tab化等界面效果, 今天有空下载来看了一下, 用起来还是很容易的, 大概讲一下, 省得以后忘记了.

dockpanel中提供了几个可用的类, 重要的有两个, 一是DockPanel, 一是DockContent,

DockPanel是从panel继承出来的, 用于提供可浮动的dock的子窗口进行浮动和dock的场所,
DockContent是从form类中继承出来的, 用于提供可浮动的窗口基类. 就是说: DockContent对象可以在DockPanel对象中任意贴边, 浮动, TAB化等.

建立一个docpanel风格的程序的过程是:

1.  建立一个winform程序, 引用WinFormsUI.dll;
2.  程序主窗口比如说是FrmMain; 把FrmMain.IsMdiContainer 设置为true;
3.  在FrmMain中放一个DockPanel, 比如说名称是Panel1, 把Panel1.Dock设为Fill, 或是者是你规划的地方.
4.  新建你的子文档窗口类, 就是新建一个windows FORM, 在窗口设计器里面随便你添上什么愿意要的控件. 这将是你的程序里的子窗口,  我弄了两个:
    一个叫FrmChild, 里面放了一个dock fill的editbox,
    另一个叫FrmProperty, 放了一个dock fill的PropertyGrid, 名叫propertyGrid1,
    设这两个是有用的. 后面说.
5.  打开FrmChild和FrmProperty的代码, 把class的继承类由Form改为DockContent;
如:

public class FrmChild : WeifenLuo.WinFormsUI.DockContent // 注意这里改了!
{

}


6.  为FrmMain加上两个私有成员:  
  FrmChild fc;
  FrmProperty fp;
这两个成员用来保存待会儿新建的两个窗口的指针.
7. 为FrmMain的Load写些代码, 如下:

            fc = new FrmChild();
            fp 
= new FrmProperty();
            fc.Show(
this.dockPanel1);
            fp.Show(
this.dockPanel1);
            fp.propertyGrid1.SelectedObject 
= fc;
            fp.propertyGrid1.PropertyValueChanged 
+=new PropertyValueChangedEventHandler(propertyGrid1_PropertyValueChanged);

            fc.MouseDown 
+=new MouseEventHandler(fc_MouseDown);
            fc.MouseUp 
+=new MouseEventHandler(fc_MouseUp);

就是建立两个窗口, 这两个窗口都是从DockContent中继承的, 都有贴边, tab化, 自动hide的能力, 很有意思的.
注意DockContent有新的Show()方法, 可以指定要Show的DockPanel, 当然要写上你准备的那个dockPanel1;
两个都Show了, 然后为fp的propertyGrid1指定要显示的对象, 就是fc;
之后再注册事件处理程序, 这几句是为了可以实现属性变了窗口变, 窗口变了属性变的效果, 可以动态地看到这些对象的属性对于其外观和形为的影响, 对于只想建个多窗口程序的人来说, Show完了就可了.
8. 由于上面注册的事件, 下面加几个事件处理程序:

        private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        
{
            
            
this.dockPanel1.Invalidate();
            
this.fc.Invalidate();
            
//this.fc.Refresh();

        }


        
private void fc_MouseDown(object sender, MouseEventArgs e)
        
{
            
this.fp.propertyGrid1.Refresh();
        }


        
private void fc_MouseUp(object sender, MouseEventArgs e)
        
{
            
this.fp.propertyGrid1.Refresh();
        }


运行吧, 看看效果? 你把这两个窗口放到边上, 这里哪里都试试, 挺有意思的.
你也可以借这个程序试试DockContent的各个属性的效果.

差点忘记, 这里有这东西的下载地址, 有源码的, 很不错!  就是从我这里连速度太慢了.

http://sourceforge.net/projects/dockpanelsuite/

Feedback

#1楼   回复  引用  查看    

2005-06-05 01:09 by 双鱼座      
天啦!还有这样的宝贝,我居然现在才知道

#2楼   回复  引用    

2005-08-04 11:11 by 阿良[未注册用户]
我下载了一个,添加引用时说需要。net2.0才行,你那个dll支持1.1的吗,如果支持请发chjlcn@126.com?subject=CJL(email主题需以CJL开始才能收到。)
谢谢。

#3楼   回复  引用    

2005-08-14 01:49 by 子雲[未注册用户]
請問這個Library是免費使用的嗎?
因最近有個軟體要開發,想使用這個Library。但不知道會不會侵犯到版權問題…

#4楼   回复  引用    

2005-10-26 22:08 by xxx[未注册用户]
是免费的,你可以更改下名称空间,然后重新编译就成为你自己的东西了,不过这样做了好像对不住自己啊??

#5楼   回复  引用    

2005-11-18 12:52 by jamez[未注册用户]
我也用了一下这东东,里面有人显示错误不知怎么改?
就是关闭窗口后其他窗口上的文本就缩成一点了,哪位仁兄能除一下BUG?
我用的是VS2005中文测试版

#6楼   回复  引用    

2006-06-14 21:31 by linglixin[未注册用户]
最近正在找这些东西,正好看到了,多谢。
另外,如果觉得拖动的时候,窗体颜色过于鲜艳,可以把
WinFormsUI2005\DockOutline.cs
24行 DragForm.BackColor = Color.Blue;
->
DragForm.BackColor = SystemColors.Highlight;
这样的话,和.net 2005已经一样了。

#7楼   回复  引用    

2006-07-19 20:57 by kevinliang[未注册用户]
请教一下子:tab的背景色如何和vs2005一致,单独的灰色太难看了

#8楼   回复  引用    

2006-07-27 17:41 by snowmaple[未注册用户]
请教dockpanel suite的使用,谁有详细的使用方法发上来看下

#9楼   回复  引用    

2006-07-27 17:44 by snowmaple[未注册用户]
我的qq:24623362有时间可以一块讨论dockpanel suite的使用

#10楼   回复  引用    

2006-08-04 20:26 by ttt[未注册用户]
vc能不能用?

#11楼   回复  引用    

2006-08-31 11:17 by BINNYZHANG[未注册用户]
怎么都下载不了,请楼主给我发一份
我的邮箱地址:hh-3000@163.com

#12楼   回复  引用    

2006-09-29 00:53 by mscao[未注册用户]
我在你提供的下载链接里面已经下载了相应控件。按照你的说明引用了WeifenLuo.WinFormsUI.Docking.dll
关于第 4 点 :
“4. 新建你的子文档窗口类, 就是新建一个windows FORM, 在窗口设计器里面随便你添上什么愿意要的控件. 这将是你的程序里的子窗口, 我弄了两个:
一个叫FrmChild, 里面放了一个dock fill的editbox,
另一个叫FrmProperty, 放了一个dock fill的PropertyGrid, 名叫propertyGrid1,
设这两个是有用的. 后面说.

在这里你是否是添加 两个windows 窗体,然后在上面分别放控件??
我在vc# 2005 中没有发现editbox 控件,我放一个 TextBox 控件代替,没有发现 DockPanel 控件,我用 panel 代替的。
但是我编译运行后,没有预料的效果,我是菜鸟,请版主给予指导。
我的邮箱:msccao@163.com

#13楼   回复  引用    

2007-03-18 13:31 by ccz[未注册用户]
楼主太有才了

#14楼   回复  引用    

2007-07-17 13:49 by 小酒久[未注册用户]
我有一个MDI窗体frmMain,其中放了两个子窗体,一个叫frmNavigation子窗体(作为导航,里面放了很多的按钮),我想frmNavigation停靠在左边(这个我已实现),现在的问题是:我要怎样在frmNavigation窗体中点击一个按钮show另一个子窗体(DockAreas属性为Float, Document)????

我在frmNavigation子窗体代码设计器的button_Click事件中写:
frmCustomerManage newForm1=new frmCustomerManage(); //frmCustomerManage是我想被show的子窗体
newForm1.Show(frmMain.DockPanel1);

这样写出错!!!

救命啊,谁帮帮我呀!

#15楼   回复  引用    

2007-08-13 19:50 by 才鸟[未注册用户]
楼主,怎么显示例子里面的可隐藏的dockpanel啊
还有TAB颜色怎么调啊

#16楼   回复  引用    

2008-02-26 09:49 by bob0234[未注册用户]
WinFormsUI.dll

我怎么下载后没找到啊 在哪里啊

#17楼   回复  引用    

2008-04-08 09:53 by lifly[未注册用户]
楼主可以发个给我吗?leefly.good@163.com

#18楼   回复  引用    

2008-07-10 18:23 by 刘宝[未注册用户]
好东西啊!终于找到了

#19楼   回复  引用    

2009-02-24 21:55 by 求个救[未注册用户]
求救主人,怎么改子窗体的默认宽度呀?我设置了Width值,但不起作用!



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 111493




相关文章:

相关链接: