【C#】【Form】Splitter ~ 画像比較スライダーをWindows Formで実装する ~

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37801875.html
で、画像比較スライダーを扱ったが、今回は、Windows Formで実装する。
その際に、Splitter (仕切り線) を利用したので紹介する。

■ Splitter

 * Windowsフォームを分割するためのもの

■ 主なプロパティ

MinSize

 * コントロールの最小幅

MinExtra

 * MinSizeの反対側の最小幅

Size.Width

 * 境界線の太さを変更する

■ 主なイベント

SplitterMoving / SplitterMoved

 * 境界線の動いている時と動いた後のイベント
[[https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.splittereventargs?view=netframework-4.7.2]]

MouseEnter / MouseHover / MouseLeave

 * MouseEnter : マウスカーソルが乗った瞬間にイベントが発生
 * MouseHover : マウスカーソルが一定時間以上動かなかった時のみ発生
 * MouseLeave : マウスカーソルが離れたらイベントが発生

■ サンプル

 * 特に、コーディングは不要。

コントロール構成

 + Panel (Name:panel1)
   + PictureBox (親にドッキング。比較画像1を設定)
     + Panel (Name:panel2, Dock:Left)
     | + PictureBox (親にドッキング。比較画像2を設定)
     + Splitter (MinExtra:0, MinSize:0, Size.Width:5(任意:境界線の太さ))
PictureBox については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/23504075.html

補足1:境界線の状態を保存したい場合

https://blogs.yahoo.co.jp/dk521123/37889424.html
のように、アプリ状態を保存したい場合、
境界線の状態を保存するには「子Panelの幅・Width(上記の例の場合、panel2)」を保持しておけばいい
~~~~~~
// 境界線の状態を保存
Properties.Settings.Default.FormSplitterWidth = this.panel2.Width;

Properties.Settings.Default.Save();
~~~~~~

補足2:マウスムーブ時に変更を反映するには...

SplitterMovingイベントで「子Panelの幅・Width(上記の例の場合、panel2)」を変更する
using System;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void splitter1_SplitterMoving(object sender, SplitterEventArgs e)
    {
      // For Debug
      Console.WriteLine("e.X : " + e.X + " e.SplitX : " + e.SplitX);

      this.panel2.Width = e.SplitX;
      this.pictureBox1.Invalidate();
    }


    private void splitter1_SplitterMoved(object sender, SplitterEventArgs e)
    {
      var splitter = sender as Splitter;
      splitter.Invalidate();

      // For Debug
      Console.WriteLine("this.panel2.Width : " + this.panel2.Width);
    }
  }
}


関連記事

Windows Form ~ 目次 ~

https://blogs.yahoo.co.jp/dk521123/8054245.html

PictureBox [8] ~ 画像比較スライダーをWindows Formで実装する ~

https://blogs.yahoo.co.jp/dk521123/38051736.html

SplitContainer

https://blogs.yahoo.co.jp/dk521123/29162821.html

PictureBox [1] ~ 画像を表示する ~

https://blogs.yahoo.co.jp/dk521123/23504075.html

アプリ状態を復元する仕組みを考える

https://blogs.yahoo.co.jp/dk521123/37889424.html

【JS】【jQuery】画像比較スライダー

https://blogs.yahoo.co.jp/dk521123/37801875.html