抽空看了一下 dockpanel suite, 知道如何用了, 立此存照

这个控件不错, 可以很方便地实现如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/

posted @ 2005-03-02 15:23 HAL9000 阅读(5521) 评论(18)  编辑 收藏 所属分类: 技术

  回复  引用  查看    
#1楼 2005-06-05 01:09 | 双鱼座      
天啦!还有这样的宝贝,我居然现在才知道
  回复  引用    
#2楼 2005-08-04 11:11 | 阿良 [未注册用户]
我下载了一个,添加引用时说需要。net2.0才行,你那个dll支持1.1的吗,如果支持请发chjlcn@126.com?subject=CJL(email主题需以CJL开始才能收到。)
谢谢。
  回复  引用    
#3楼 2005-08-14 01:49 | 子雲 [未注册用户]
請問這個Library是免費使用的嗎?
因最近有個軟體要開發,想使用這個Library。但不知道會不會侵犯到版權問題…
  回复  引用    
#4楼 2005-10-26 22:08 | xxx [未注册用户]
是免费的,你可以更改下名称空间,然后重新编译就成为你自己的东西了,不过这样做了好像对不住自己啊??
  回复  引用    
#5楼 2005-11-18 12:52 | jamez [未注册用户]
我也用了一下这东东,里面有人显示错误不知怎么改?
就是关闭窗口后其他窗口上的文本就缩成一点了,哪位仁兄能除一下BUG?
我用的是VS2005中文测试版
  回复  引用    
#6楼 2006-06-14 21:31 | linglixin [未注册用户]
最近正在找这些东西,正好看到了,多谢。
另外,如果觉得拖动的时候,窗体颜色过于鲜艳,可以把
WinFormsUI2005\DockOutline.cs
24行 DragForm.BackColor = Color.Blue;
->
DragForm.BackColor = SystemColors.Highlight;
这样的话,和.net 2005已经一样了。

  回复  引用    
#7楼 2006-07-19 20:57 | kevinliang [未注册用户]
请教一下子:tab的背景色如何和vs2005一致,单独的灰色太难看了
  回复  引用    
#8楼 2006-07-27 17:41 | snowmaple [未注册用户]
请教dockpanel suite的使用,谁有详细的使用方法发上来看下
  回复  引用    
#9楼 2006-07-27 17:44 | snowmaple [未注册用户]
我的qq:24623362有时间可以一块讨论dockpanel suite的使用
  回复  引用    
#10楼 2006-08-04 20:26 | ttt [未注册用户]
vc能不能用?
  回复  引用    
#11楼 2006-08-31 11:17 | BINNYZHANG [未注册用户]
怎么都下载不了,请楼主给我发一份
我的邮箱地址:hh-3000@163.com
  回复  引用    
#12楼 2006-09-29 00:53 | 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 | ccz [未注册用户]
楼主太有才了
  回复  引用    
#14楼 2007-07-17 13:49 | 小酒久 [未注册用户]
我有一个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 | 才鸟 [未注册用户]
楼主,怎么显示例子里面的可隐藏的dockpanel啊
还有TAB颜色怎么调啊
  回复  引用    
#16楼 2008-02-26 09:49 | bob0234 [未注册用户]
WinFormsUI.dll

我怎么下载后没找到啊 在哪里啊
  回复  引用    
#17楼 2008-04-08 09:53 | lifly [未注册用户]
楼主可以发个给我吗?leefly.good@163.com
  回复  引用    
#18楼 2008-07-10 18:23 | 刘宝 [未注册用户]
好东西啊!终于找到了

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: