利用DockPanel與C#製作表單浮動和停靠(vs2010)

來源:互聯網
上載者:User

利用DockPanel與C#製作表單浮動和停靠(vs2010) 點擊功能窗  然後滑鼠拖動form2的效果圖如下:

1。下載的DockPanel。 在SF上能下到最新的版本的DLL和示範。 解壓檔案得到如下圖檔案:

   2、構建主表單(父表單):frmMain的。      (1)建立工程:FloatingForm
     (2)將DockPanel.config和WeifenLuo.WinFormsUI.Docking.dll複製到當前項目的       FloatingForm\FloatingForm\bin\Debug檔案下。


     (3)首先添加引用WeifenLuo.WinFormsUI.Docking。
               然後點擊工具箱右鍵添加DockPanel控制項到工具箱中。

     (4)添加主表單frmMain中,並設定主表單的IsMdiContainer =true;
     (5)在主表單中添加的DockPanel控制項:DockPanel1,並設定DockPanel中的documentstyle:                    dockPanel.DocumentStyle = DocumentStyle.DockingMdi;

  frmMain的介面如下:(如果添加dockpanel控制項到frmMain出現錯誤則轉到注意事項查看)

  後台代碼如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using WeifenLuo.WinFormsUI.Docking;

using System.IO;

 

namespace FloatingForm

{

   public partial class frmMain : Form

    {

       public frmMain()

       {

           InitializeComponent();

       }

 

       private string m_DockPath = string.Empty;  

 

       private void Form1_Load(object sender, EventArgs e)

       {

           this.DockPanel1.DocumentStyle = DocumentStyle.DockingMdi;

           this.m_DockPath=Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"DockPanel.config");

           this.InitDockPanel();

           this.StatusBar.Items.Add("就緒"); //這是狀態列的,可要可不要,不影響。     

       }

       #region 按照設定檔初始化Dockpanel

       private void InitDockPanel()

       {

           try

           {

                //根據設定檔動態載入浮動表單 

               this.DockPanel1.LoadFromXml(this.m_DockPath, delegate(stringpersistString)

                {

                    //功能表單 

                    if (persistString ==typeof(frmFunction).ToString())

                   {

                        returnfrmFunction.GetInstance();

                    }

                    //主架構之外的表單不顯示 

                    return null;

                });

           }

           catch (Exception)

           {

                // 設定檔不存在或設定檔有問題時按系統預設規則載入子表單 

                frmFunction.GetInstance().Show(this.DockPanel1);

           }

       }

       #endregion

 

       private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

       {

           try

            {

//為了下次開啟程式時,浮動表單的顯示位置和關閉時一致,

               DockPanel1.SaveAsXml(this.m_DockPath);

           }

           catch (Exception ex)

           {

                MessageBox.Show("儲存Dockpanel設定檔失敗," + ex.Message);

                return;

           } 

       }

 

       private void dockPanel1ToolStripMenuItem_Click(object sender, EventArgse)

       {

           frmFunction frmFun = frmFunction.GetInstance();

           frmFun.Show(this.DockPanel1, AppConfig.ms_FrmFunction);

           this.StatusBar.Items[0].Text = frmFun.Text;

       }

    }

}

  3. 構建需要浮動顯示的表單:FrmFunction。 (1)在當前工程中添加表單:FrmFunction;(注意:浮動表單和標籤表單需要繼承自DockContent);
(2)為了保證在關閉某一浮動表單之後,再開啟時能夠在原位置顯示,要對浮動表單處理,處理表單的   DockstateChanged事件,標籤表單dock位置改變,記錄到公用類;

  frmFunction介面如下:(所要浮動的表單)

  後台代碼如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

usingSystem.Windows.Forms;

usingWeifenLuo.WinFormsUI.Docking;

 

namespace FloatingForm

{

   public partial class frmFunction : DockContent

    {

       private static frmFunctionInstance;

 

       public frmFunction()

       {

           InitializeComponent();

       }

       public static frmFunction GetInstance()

        {

            if (Instance == null)

            {

                Instance = new frmFunction();

            }

            return Instance;

        }

    //為了保證在關閉某一浮動表單之後,再開啟時能夠在原位置顯示,要對浮動表單處理,處理表單的DockstateChanged事件,標籤表單dock位置改變,記錄到公用類

       private void FrmFunction_DockStateChanged(object sender, EventArgs e)

       {

           //關閉時(dockstate為unknown) 不把dockstate儲存 

            if (Instance != null)

            {

                if (this.DockState ==DockState.Unknown || this.DockState == DockState.Hidden)

               {

                    return;

                }

              AppConfig.ms_FrmFunction =this.DockState;

            }

       }  

       private void FrmFunction_FormClosing(object sender, FormClosingEventArgse)

       {

           Instance = null;  // 否則下次開啟時報錯,提示“無法訪問已釋放對象”

       }

 

    }

} 4. 在當前工程中添加類AppConfig(公用類)。 代碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using WeifenLuo.WinFormsUI.Docking;

 

namespace FloatingForm

{

   class AppConfig

   {   

        public static DockState ms_FrmFunction =DockState.DockLeft;   // 功能表單,左端停靠  

    }

}

5.成功運行,實現準系統(停靠在中間的效果圖)

  注意事項

問題(1)描述:

      vs2010添加WeifenLuo.WinFormsUI.Docking.DockPanel.dll檔案後,從工具列中添加DockPanel控制項時報錯,提示【類型 Universe 無法解析程式集: System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a。】

解決方案:

       開啟【項目】的FloatingForm屬性,選擇【應用程式】,,修改【目標Framework(所有配置)】選項,在下拉框選項中選擇【.net Framework 4】即可。


以上我個人看別人部落格之後,在自己動手操作後的個人總結,主要寫了一些主要步驟和注意事項而已,如有紕漏,歡迎指教。謝謝。 (分享快樂)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.