C# WinFormsでドッキングウィンドウを使う

# 環境
- Windows 10 Pro
- Microsoft Visual Studio 2019
- .Net Freamwork 4.5

# 必要なもの
- DockPanel Suite（導入の仕方については後述）

# DockPanel Suiteの導入

1. Visual Studioのメニューの、プロジェクト(P) > NuGetパッケージの管理(N)をクリック

2. NuGetパッケージマネージャーを開いたら、「dockpanelsuite」を検索する。
![NuGet1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483049/d168d124-6996-0b2b-6dab-41b1ec30c97a.png)

3. 検索結果に出てきた DockPanelSuite をインストールする。

# 早速使ってみる

1.Visual Studioのメニューの、プロジェクト(P) > 新しい項目の追加(W)...をクリック
2.「新しい項目の追加」を開いたら、左の インストール済み > Visual C# アイテム > Windows Forms を選択する。
3.継承フォーム(Windows フォーム)を選択し、追加(A)をクリックする。
4.「継承ピッカー」が開いたら、「参照(B)...」をクリックし、「WeifenLuo.WinFormsUI.Docking.dll」を選択する。

注意: このサンプルでは、継承フォーム「Window1」「Window2」「Window3」「Window4」を作成しています。

コード:

```csharp:MainForm.cs
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;

namespace DockingExample
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            dockPanel1.DocumentStyle = DocumentStyle.DockingWindow;

            Window1 window1 = new Window1();
            window1.Show(dockPanel1, DockState.DockRight);

            Window2 window2 = new Window2();
            window2.Show(dockPanel1, DockState.Document);

            Window3 window3 = new Window3();
            window3.Show(dockPanel1, DockState.DockLeft);

            Window4 window4 = new Window4();
            window4.Show(dockPanel1, DockState.DockLeft);
        }
    }
}
```

```csharp:Window1.cs
namespace DockingExample
{
    public partial class Window1 : WeifenLuo.WinFormsUI.Docking.DockContent
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}
```

```csharp:Window2.cs
namespace DockingExample
{
    public partial class Window2 : WeifenLuo.WinFormsUI.Docking.DockContent
    {
        public Window2()
        {
            InitializeComponent();
        }
    }
}
```

```csharp:Window3.cs
using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace DockingExample
{
    public partial class Window3 : WeifenLuo.WinFormsUI.Docking.DockContent
    {
        public Window3()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {
                progressBar1.Value = i;
                System.Threading.Thread.Sleep(80);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 50;
            progressBar1.MarqueeAnimationSpeed = 40;
            progressBar1.Style = ProgressBarStyle.Marquee;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
            progressBar1.Style = ProgressBarStyle.Continuous;
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            progressBar2.Value = trackBar1.Value;
        }
    }
}
```

```csharp:Window4.cs
namespace DockingExample
{
    public partial class Window4 : WeifenLuo.WinFormsUI.Docking.DockContent
    {
        public Window4()
        {
            InitializeComponent();
        }
    }
}
```

# 結果

![ScreenShot1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483049/fe5e0fde-0cb0-fed8-1ec1-d354c8df1bd4.png)

サンプルコードのダウンロード :
~~http://kgf086.bake-neko.net/Data/DockingExample.zip~~