【C#】SplitContainerの境界線に描画する

SplitContainerの境界線をクリックすると片側のPanelを閉じるなどのGUIで、境界線の部分に三角形などを書きたい場合があります。

こんな感じ↓

 

その場合、どうするのか?

Splitterのオブジェクトを探してみても存在しないのですが、SplitContainerの構造を理解すると、Splitter部分に描画する事ができます。

 

上図のようにSplitContainerはContainerの上に2つのパネル(Panel1,Panel2)が張り付いているイメージです。

SplitterはPanel1とPanel2の隙間から見えるContainerそのものとなっています。

そのため、Splitterに描画するには、隙間から見えるContainerに描画すればOKです。

また、参考までに主なSplitContainerのプロパティは以下の通りです。

 

その事を理解したうえでSplitContainerのPaintイベントで三角印を書くサンプルは以下のようになります。

 private void splitContainer1_Paint(object sender, PaintEventArgs e)
 {
     Point[] p = new Point[3];

     p[0] = new Point(splitContainer1.SplitterDistance, splitContainer1.Height / 2 - splitContainer1.SplitterWidth * 2 / 3);
     p[1] = new Point(splitContainer1.SplitterDistance, splitContainer1.Height / 2 + splitContainer1.SplitterWidth * 2 / 3);
     p[2] = new Point(splitContainer1.SplitterDistance + splitContainer1.SplitterWidth, splitContainer1.Height / 2);

     e.Graphics.FillPolygon(Brushes.Gray, p);
 }

 private void splitContainer1_Resize(object sender, EventArgs e)
 {
     splitContainer1.Refresh();
 }

上記のプログラムはかなりいい加減なので、お好みで修正して下さい。

 

Paintイベントだけでは、SplitContainerのリサイズの時に描画してくれないので、ResizeイベントでコントロールをRefresh()してPaintイベントを発生させています。

 

C#へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください