zoukankan      html  css  js  c++  java
  • 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(把WinFormsUI.dll放到工具箱,然后拉出来个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/


  • 相关阅读:
    Unity3D在各平台上的路径
    Unity简单的单例模式
    C#遍历枚举(Enum)
    C#常用的流类型(FileStream,SteamWriter/StreamReader,MemoryStream等)
    编写一个C程序,运行时输入a,b,c三个值,输出其中最大者
    精确一维搜索算法(直接法)
    Java一维数组求和
    java 导出EXCEL
    Java判断字符串的数字类型(小数、整数)
    网址存储
  • 原文地址:https://www.cnblogs.com/HeroBeast/p/784243.html
Copyright © 2011-2022 走看看