C#.NETフォームドッキングコントロールの使用WeifenLuo.WinFormsUI.Docking.dll



Use C Net Form Docking Control Weifenluo



ソースコード: https://github.com/dockpanelsuite/dockpanelsuite

https://www.cnblogs.com/wuhuacong/archive/2009/07/09/1520082.html



クラスライブラリの紹介
weiFenLuo.winFormsUI.Docking.dllは、オープンソースプロジェクトのDockPanelSuiteのクラスライブラリです。これは非常に強力なインターフェイスレイアウトコントロールであり、WindowsドッキングやVisual Studioのドラッグなどの機能を実現し、カスタムレイアウトをXMLファイルとして保存し、XML構成ファイルを読み込むことができます。

ダイナミックライブラリはオープンソースプロジェクトDockPanelSuiteから派生しており、接続アドレスは次のとおりです。weifenluo.winformsUI.Docking.dllソースコード
ソースコード、直接使用するdll、サンプルプログラムをダウンロードできます。最新バージョンは2.9.0.0で、VS2012環境で使用できます。



Dockpanelにはいくつかの利用可能なクラスがあり、主なクラスは2つ、1つはDockPanel、もう1つはDockContentです。 DockPanelはパネルから継承され、フローティングドックの子ウィンドウを提供するために使用されます。 DockContentはフォームクラスから継承され、フローティングウィンドウの基本クラスを提供するために使用されます。つまり、DockContentオブジェクトは、DockPanelオブジェクトのWelt、float、TABなどで任意にすることができます。

使用説明書
メインフォームの確立
フォームアプリケーションWeifenLuoUISampleを作成し、参照WeifenLuo.WinFormsUI.Docking.dllを追加します
メインフォームの名前をテストメインウィンドウとしてMainWndに変更し、メインフォームMainwndのIsMdiContainerプロパティをtrueに設定します。
dockPanelコントロールをツールボックスに追加します。[ツールボックス]-> [右クリック]-> [選択]-> [。netコンポーネント]-> [参照]-> [weiFenLuo.winFormsUI.Docking.dll]がツールボックスに表示されます。dockPanelが表示され、dockPanelをMainwndにドラッグアンドドロップします。 、dockpanelの関連プロパティを設定します:dockPanel.Dock = Fill

ドッキングフォームの確立
[1]新しいWindowsForm1を作成し、WeifenLuo.WinFormsUI.Docking.DockContentから継承するようにフォームを変更します。
System.Dataを使用する
System.Drawingを使用する
System.Linqを使用する
System.Textを使用する
System.Windows.Formsを使用する

名前空間WeifenLuoUISample
{{
パブリック部分クラスForm1:WeifenLuo.WinFormsUI.Docking.DockContent
{{
パブリックForm1()
{{
InitializeComponent()
}
}
}




[2] MainWndにLoadイベントの応答コードを追加して、ドッキングウィンドウを作成します
システムを使用する
System.Collections.Genericを使用する
System.ComponentModelを使用する
System.Dataを使用する
System.Drawingを使用する
System.Linqを使用する
System.Textを使用する
System.Windows.Formsを使用する
WeifenLuo.WinFormsUI.Dockingを使用する

名前空間WeifenLuoUISample
{{
パブリック部分クラスMainWnd:フォーム
{{
public MainWnd()
{{
InitializeComponent()
}

private void MainWnd_Load(object sender、EventArgs e)
{{
Form1 form = new Form1()
form.Show(_dockPanel、DockState.DockLeft)
}
}
}

【3】ランニング効果は以下の通りです。

インターフェイスレイアウトを保存します
[1]新しいWindowsフォームForm2を作成し、上記のように、WeifenLuo.WinFormsUI.Docking.DockContentから継承するようにフォームを変更します。

[2] Form1およびForm2のHideOnCloseプロパティをTrueに設定します。これは、フォームが閉じられたときに、リソースが実際には閉じられずに破棄されることを意味します。

[3]メンバー変数を追加して、インターフェースレイアウトを保存します。
プライベート静的文字列_dockpanelConfigFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath)、 'DockManager.config')
プライベートForm1_form1 = new Form1()
プライベートForm2_form2 = new Form2()

[4] 2つのサブメニューのClickイベントを追加して、フォームForm1とForm2を表示します
private void form1ToolStripMenuItem_Click(object sender、EventArgs e)
{{
_form1.Show(_dockPanel、DockState.DockLeft)
}

private void form2ToolStripMenuItem_Click(object sender、EventArgs e)
{{
_form2.Show(_dockPanel、DockState.Document)
}

[5]メインフォームが読み込まれると、最後に保存されたインターフェイスが表示されます。 DeserializeDockContentコールバック関数を作成する必要があります。これは非常に簡単です。
コールバック関数:
public IDockContent GetDeserializeDockContent(stringpersistString)
{{
if(persistString == typeof(Form1).ToString())
_form1を返します
if(persistString == typeof(Form2).ToString())
_form2を返す
nullを返す
}

メインフォームが読み込まれ、最後に保存されたインターフェイスが読み込まれます。
private void MainWnd_Load(object sender、EventArgs e)
{{
試してみてください
{{
if(File.Exists(_dockpanelConfigFile))
_dockPanel.LoadFromXml(_dockpanelConfigFile、new DeserializeDockContent(GetDeserializeDockContent))
}
キャッチ(例外)
{{
}

}

[6]メインフォームを閉じたら、現在のインターフェイスを保存します。
private void MainWnd_FormClosing(object sender、FormClosingEventArgs e)
{{
_dockPanel.SaveAsXml(_dockpanelConfigFile)
}

[7]注
この方法では、インターフェイスレイアウトをDockPanelにのみ保存でき、メインウィンドウのサイズと位置は保存できないため、メインウィンドウのサイズと場所を保存する必要があります。 .Configなどの構成ファイルは、メインウィンドウの開始位置とサイズを保存します。これは非常に単純であり、ここでは詳しく説明しません。
————————————————
===============================================

クールな効果、それは一生懸命学ぶ価値があります。

ツールボックスのリセット:

プロジェクト名TestDockPanelControlで新しいWinFormプログラムを作成します。 Form1フォームを選択した後、ツールボックスを選択します--- >> WeiFenLuoという名前の新しい追加タブを作成します--- >>右クリック--- >>アイテムを選択します--- >>参照---

>> weiFenLuo.winFormsUI.Docking.dll --- >> OK。このとき、DockPanelコントロールがツールボックスに表示されます。上記の手順は、DockPanelコントロールをツールボックスに追加するためのものです。

次に、DockPanelコントロールのドッキング効果がどのように達成されるかを確認します。

メインフォームの設定:(デフォルトではForm1フォームがメインフォームです)

Form1フォームのプロパティ設定
フォームのTextプロパティを元のForm1フォームのメインフォームとして設定し、IsMdiContainerプロパティをtrueに設定して、MDIプログラムとして設定します(DockPanelコントロールのデモンストレーション効果を体験するため)。 FormBorderStyleはに設定されています

FixedSingle、StartPositionはCenterScreenに設定され、WindowStateはMaximizedに設定されます。

Form1フォームコントロールレイアウト
ツールボックスの下のMenuStripコントロールとDockPanelコントロールをフォームにドラッグアンドドロップし、DockPanelコントロールのDockプロパティをFillに設定します。次の図に示すように、MenuStripサブメニューオプション設定を設定します。

ドックフォーム設定(FormDockはサブフォームです):

FormDockという名前の新しいWinFormフォームを追加し、Text値をドッキングされたフォームに設定します。Size値は207,382です。ここでの値は実際のニーズに基づくことができ、一意ではありません。

要点:DockContentから継承するようにコード内のフォームを変更し、WeifenLuo.WinFormsUI.Docking名前空間を使用して追加します
はい変更前

画像

 

パブリック部分クラスFormDock:Form
{{
public FormDock()
{{
InitializeComponent()
}
}

画像

変更後:

画像

 

パブリック部分クラスFormDock:DockContent
{{
public FormDock()
{{
InitializeComponent()
}
}

画像

メインフォームForm1フォームに戻り、ドッキングするフォーム(FormDock)をForm1フォームに表示します。
コードは次のとおりです。

画像

 

//下
private void bottomToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = 'ボトムドック'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.Bottom)
}
//全画面表示
private void fillToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = 'フルスクリーンドッキング'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.Fill)
}
//左側
private void leftToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = '左側のドッキング'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.Left)
}
//なし
private void noneToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = 'なし'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.None)
}
//右側
private void rightToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = '右側のドック'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.Right)
}
//上
private void topToolStripMenuItem_Click(object sender、EventArgs e)
{{
FormDock frm = new FormDock()
frm.Text = 'トップドック'
frm.Show(this.dockPanel1)
frm.DockTo(this.dockPanel1、DockStyle.Top)
}

画像

上記は、DockPanelコントロールを使用して、操作全体をドッキングするフォームを作成するためのものです。

効果図は次のとおりです。

DockPanelコントロールは、サブフォームをドラッグアンドドロップすることもできます
DockPanelコントロールのAllowDropをtrueに設定するだけです。効果画像は以下の通りです

================================================== ==

WinFormインターフェイスによって開発されたレイアウトコントロール「WeifenLuo.WinFormsUI.Docking」の使用

この記事では、Winformプログラム開発でのレイアウトインターフェイスの設計を紹介し、シェアウェアでレイアウトコントロール「WeifenLuo.WinFormsUI.Docking」を使用する方法について説明します。

レイアウト管理 'WeifenLuo.WinFormsUI.Docking'は、優れたオープンソース管理です。使ったことのある人なら誰でも深い経験があります。コントロールは強力で美しく、商用コントロールに劣りません。また、コントロールは比較的簡単に使用できます。まず、コントロールで使用されるプログラムインターフェイスの表示効果を確認します。

配電網視覚化管理システムのインターフェースのスクリーンショット:

Fukada Star Water Delivery Management System Onlineのインターフェースのスクリーンショット:

私はこのレイアウトコントロールをいくつかのシェアウェアで使用しました。このインターフェースの設計と表示を完了する方法を紹介するために、ソフトウェア「深田スター給水管理システムオンライン」を例として取り上げましょう。

1.最初に、MainFormという名前のメインインターフェイスフォームを追加します。フォームIsMdiContainerはTrueに設定され、マルチドキュメントフォーム形式に設定されます。レイアウトコントロール 'WeifenLuo.WinFormsUI.Docking.DockPanel'をメインフォームMainFormにドラッグアンドドロップし、次のプロパティを設定します。

DockはFill、DocumentStyleはDockingMdi、RightToLeftLayoutはTrueです。

これらの属性の意味は難しくありません。ドックは、MDIフォーム全体をカバーする領域です。 DocumentStyleはマルチドキュメントタイプです。 RightToLeftLayoutは、新しく開いたウィンドウが適切な領域にドッキングされることを意味します。

以下に示すように、デザインインターフェイスビューを確認します。

2.メインインターフェイスは基本的に十分です。さらに、「配水管理システムネットワーク版」のインターフェースの左側にツールバーがあることがわかります。実際にはドッキングされた形式です。関連するツールのショートカットキーボタンを表示するために使用するフォームを追加します。 WeifenLuo.WinFormsUI.Docking.DockContentから継承されたMainToolWindowという名前のフォーム。

'HideOnClose'プロパティは非常に重要です。このプロパティは通常Trueに設定されています。つまり、ウィンドウを閉じると、フォームは実際に閉じられるのではなく、非表示になるだけです。

左側のMainToolWindowをドッキングするためのコードは、MainFormコンストラクターまたはLoad関数にロードすることです。

mainToolWin.Show(this.dockPanel、DockState.DockLeft)

3.ツールウィンドウは完成しましたが、メインのビジネスウィンドウはまだ完成していません。これは以下のコンテンツの一部です。

便宜上、以下に示すように、DockContentから継承されたBaseFormという名前の基本クラスフォームを定義します。

パブリッククラスBaseForm:DockContent

その後、各ビジネスウィンドウはBaseFormを継承できます。

4.残りのコンテンツは、メインフォームMainFormで関連するビジネスウィンドウを表示する方法です。表示されるコードは次のとおりです

画像

パブリック部分クラスMainForm:フォーム
{{
#region属性フィールド

private MainToolWindow mainToolWin = new MainToolWindow()
プライベートFrmProductfrmProduct = new FrmProduct()
プライベートFrmCustomerfrmCustomer = new FrmCustomer()
プライベートFrmOrderfrmOrder = new FrmOrder()
プライベートFrmStockfrmStock = new FrmStock()
プライベートFrmComingCallfrmComingCall = new FrmComingCall()
プライベートFrmDelivingfrmDeliving = new FrmDeliving()
プライベートFrmTicketHistoryfrmHistory = new FrmTicketHistory()

#endregion

public MainForm()
{{
InitializeComponent()

SplashScreen.Splasher.Status = '関連するコンテンツが表示されています '
System.Threading.Thread.Sleep(100)

mainToolWin.Show(this.dockPanel、DockState.DockLeft)
frmComingCall.Show(this.dockPanel)
frmDeliving.Show(this.dockPanel)
frmHistory.Show(this.dockPanel)
frmStock.Show(this.dockPanel)
frmProduct.Show(this.dockPanel)
frmCustomer.Show(this.dockPanel)
frmOrder.Show(this.dockPanel)

SplashScreen.Splasher.Status = '初期化が完了しました '
System.Threading.Thread.Sleep(50)

SplashScreen.Splasher.Close()
}

画像

5.基本ウィンドウの基本操作イベント機能を以下に掲載します。

画像

private void menu_Window_CloseAll_Click(object sender、EventArgs e)
{{
CloseAllDocuments()
}

private void menu_Window_CloseOther_Click(object sender、EventArgs e)
{{
if(dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{{
フォームactiveMdi = ActiveMdiChild
foreach(MdiChildrenのフォームフォーム)
{{
if(form!= activeMdi)
{{
form.Close()
}
}
}
そうしないと
{{
foreach(dockPanel.DocumentsToArray()のIDockContentドキュメント)
{{
if(!document.DockHandler.IsActivated)
{{
document.DockHandler.Close()
}
}
}
}

プライベートDockContentFindDocument(文字列テキスト)
{{
if(dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{{
foreach(MdiChildrenのフォームフォーム)
{{
if(form.Text == text)
{{
DockContentとしてフォームを返す
}
}

nullを返す
}
そうしないと
{{
foreach(dockPanel.DocumentsのDockContentコンテンツ)
{{
if(content.DockHandler.TabText == text)
{{
コンテンツを返す
}
}

nullを返す
}
}

public DockContent ShowContent(string caption、Type formType)
{{
DockContent frm = FindDocument(caption)
if(frm == null)
{{
frm = ChildWinManagement.LoadMdiForm(Portal.gc.MainDialog、formType)as DockContent
}

frm.Show(this.dockPanel)
frm.BringToFront()
frmを返す
}

public void CloseAllDocuments()
{{
if(dockPanel.DocumentStyle == DocumentStyle.SystemMdi)
{{
foreach(MdiChildrenのフォームフォーム)
{{
form.Close()
}
}
そうしないと
{{
IDockContent []ドキュメント= dockPanel.DocumentsToArray()
foreach(ドキュメント内のIDockContentコンテンツ)
{{
content.DockHandler.Close()
}
}
}

画像

最後に、制御ファイルを送信すると、誰もが遊びに来ることができます。

http://files.cnblogs.com/wuhuacong/WeifenLuo.WinFormsUI.Docking.rar