1. 程式人生 > >C# 開源控制元件DockPanel 使用心得(重要)

C# 開源控制元件DockPanel 使用心得(重要)

DockPanel中提供了幾個可用的類,重要的有兩個:DockPanel和DockContent。

DockPanel是從panel繼承出來的,用於提供可浮動的dock的子視窗進行浮動和dock的場所, DockContent是從form類中繼承出來的,用於提供可浮動的視窗基類.就是說: DockContent物件可以在DockPanel物件中任意貼邊,浮動, TAB化等。

WeifenLuo.WinFormsUI.Docking.dll的使用方法:

1.建立一個WinForm工程,預設生成了一個WinForm窗體Form1;

2.引用—>新增引用—>瀏覽—>WeifenLuo.WinFormsUI.Docking.dll,最好是先把WeifenLuo.WinFormsUI.Docking.dll拷貝到專案目錄下面,方便以後建立安裝檔案;

3.設定窗體(Form1)屬性IsMdiContainer為True;

4.工具箱—>右鍵—>選擇項—>.net元件—>瀏覽—>WeifenLuo.WinFormsUI.Docking.dll—>在工具箱出現dockPanel;

5.將DockPanel拖到窗體Form1上,設定Dock屬性,我設定的是:Fill;

6.新建一個WinForm窗體,如:資料集資訊左側;

7.設定JReductBtree壓縮樹類繼承DockContent,public partial class 資料集資訊左側 : DockContent

8.在JReductBtree壓縮樹類中新增using WeifenLuo.WinFormsUI.Docking;

9.在主窗體Form1中顯示停靠窗體,程式碼如下:


public void MainWindow_Load(object sender, EventArgs e)
        {
 
            資料集資訊左側 tingkaoLeftWindow = new 資料集資訊左側();
            tingkaoLeftWindow.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);
 
            資料集內容 shujujiLoad = new 資料集內容();
            shujujiLoad.Show(this.dockPanel1);
        }

說明:


tingkaoLeftWindow.Show(this.dockPanel1, WeifenLuo.WinFormsUI.Docking.DockState.DockLeft);表示開啟主窗體的時候 tingkaoLeftWindow 在主窗體的左邊顯示;
shujujiLoad.Show(this.dockPanel1);表示 shujujiLoad 作為標籤頁顯示。

執行後的樣式如下圖:


--------------------- 
作者:caiandyong 
來源:CSDN 
原文:https://blog.csdn.net/caiandyong/article/details/50539677 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

 

 

 

一、前言

最近使用Winform 做專案,發現Winform 非常好用,特別是之前有個客戶定製需要涉及UI的,用VC++ 不是一般的難搞,後來考慮過以前玩過Winform ,修改窗體和控制元件的顏色都非常方便,因此果斷直接上。

之前在使用VC++ 的MDI風格,自己搭了一個多窗體檢視切換Demo,雖說好用,但是有一個Bug 卻一直解決不了,因此,做了兩個專案後,就不再使用了。

後面使用C#做專案的時候,由於需要一系列型號的共用一個軟體,我想要是Winform的pandel 有Dock 的風格就方便多了。於是,百度一下,發現果然有,就是開源控制元件“DockPanel”

這個開源專案不是一般的好用,因此,這篇也是記錄和總結一下,自己使用這個控制元件過程。

二、DockPanel使用

1、介紹

weiFenLuo.winFormsUI.Docking.dll是開源專案DockPanel Suite的一個類庫,可以實現像Visual Studio的視窗停靠、拖拽等功能。

控制元件官方下載地址:http://sourceforge.net/projects/dockpanelsuite/  

2、使用環境  Visual Studio 2010

3、使用方法

(1)新建解決方式,Windows 窗體應用程式

(2)修改WinForm窗體屬性,設定其為MDI窗體(多文件窗體)如圖:

(3)將WeifenLuo.WinFormsUI.Docking.dll 拷貝到工程目錄,的bin 目錄下Debug 和 Release 資料夾中。 

(4)解決方案管理器 --> 引用 --> 右鍵點選新增引用 --> 點選瀏覽 --> Debug 和 Release 資料夾 -->

選擇WeifenLuo.WinFormsUI.Docking.dll --> 點選確定      如圖:

                          


(5)工具箱-->選擇項...-->.Net Framework元件-->瀏覽-->WeifenLuo.WinFormsUI.Docking.dll

如圖1:

圖2:


(6)拖動工具箱中的DockPanel控制元件到MainForm窗體,拖動時如出現如下錯誤:

出現這個問題的原因是,建立工程時,目標框架選擇的是.Net FrameWork 4 Profile。

解決問題的方式是將在工程屬性中,修改目標框架為 .Net FrameWork 4.

(7) 在主窗體放入一個dockpanel 之後,新建一個子窗體並修改其程式碼中修改窗體繼承於DockContent,如下圖:


using WeifenLuo.WinFormsUI.Docking;
namespace DockPanel_Test
{
    public partial class Form2 : DockContent
    {     
     public Form2()
        {
            InitializeComponent();
        }
        private void Form2_Load(object sender, EventArgs e)
        {
        }
    }
}

(8)在主窗體中Load 方法中新增如下程式碼:
 Form2 form2 = new Form2();
           
            form2.Show(dockPanel1);
            form2.DockState = DockState.DockLeft;   //初始化子窗體顯示在左邊
編譯,執行如下圖,可以實現類似VC++ 中MDI 風格


可以增加多幾個窗體,實現都檢視操作。

三、使用總結

1、子窗體一般使用單例模式,這樣子資源可以重複利用;

具體講子窗體程式碼修改如下:


        private static Form2 mInstance;
        private static mDockState;
 
        private Form2()             //私有構造方法
        {
            InitializeComponent();
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
 
        }
 
        #region 靜態例項初始化函式
        public static Form2 GetInstance()
        {
            if (mInstance == null)
            {
                mInstance = new Form2();
            }
            return mInstance;
        }
        #endregion  
 
 
        #region 為了保證在關閉某一浮動窗體之後,再開啟時能夠在原位置顯示,要對浮動窗體處理,處理窗體的DockstateChanged事件,標籤窗體dock位置改變,記錄到公共類  
  
        private void FrmFunction_DockStateChanged(object sender, EventArgs e)  
        {  
            //關閉時(dockstate為unknown) 不把dockstate儲存  
            if (mInstance != null)  
            {  
                if (this.DockState == DockState.Unknown || this.DockState == DockState.Hidden)  
                {  
                    return;  
                }  
 
                mDockState = this.DockState;  
            }  
        }  
        #endregion  
 
        #region 關閉事件  
        private void FrmFunction_FormClosed(object sender, FormClosedEventArgs e)  
        {  
            mInstance = null;  // 否則下次開啟時報錯,提示“無法訪問已釋放物件”  
        }  
        #endregion  
  
    }


這樣子就可以實現資源重複利用。


參考文章:

http://blog.csdn.net/zhangyuehua123/article/details/6861401
--------------------- 
作者:gd6321374 
來源:CSDN 
原文:https://blog.csdn.net/gd6321374/article/details/78059501 
版權宣告:本文為博主原創文章,轉載請附上博文連結!