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#へ戻る
コメント