現在なんとなくwindowsフォームのsplitcontainerをいじっていまして、
どうしたものかと悩んだので質問させていただきます。
現在、splitcontainerのspliterに図形や文字を表示したいと考えております。
以下に示すコードは実行開始時やspliterを大きく動かす分には問題なく動作します。
しかし、spliterを微小区間移動させるとspliterに描写されている図形が崩れます。(パッと見、隠れてる?)
どのような解決策があるのでしょうか。
ご回答よろしくお願いいたします。
問題のコードは以下になります。spliterWidth = 40として実行しております。
splitcontainerのspliterをタブ化する記事を参考にしました。(パクリました。)
http://blog.syo-ko.com/?eid=1249
using System;
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
/// <summary>タブの短辺(長辺-短辺の長さ)</summary>
private Int32 SplitTabShortHeight = 24;
/// <summary>タブの長辺</summary>
private Int32 SplitTabLongHeight = 144;
/// <summary>タブの幅</summary>
private Int32 SplitTabWidth = 24;
/// <summary>タブの基本図形</summary>
private Point[] SplitTab;
public Form1()
{
SplitTab = new Point[4];
SplitTab[0] = new Point(0, SplitTabShortHeight);
SplitTab[1] = new Point(SplitTabWidth, 0);
SplitTab[2] = new Point(SplitTabWidth, SplitTabLongHeight);
SplitTab[3] = new Point(0, SplitTabLongHeight - SplitTabShortHeight);
InitializeComponent();
}
private void splitContainer1_Paint(object sender, PaintEventArgs e)
{
//SplitContainer
SplitContainer CtrlSplit = (SplitContainer)sender;
//描画位置
Point dOffSet = new Point(CtrlSplit.SplitterDistance, (CtrlSplit.Height - SplitTabLongHeight) / 2);
//描画タブ
Point[] dTab = null;
//タブを描画位置へシフト
dTab = new Point[] {
new Point(SplitTab[0].X + dOffSet.X, SplitTab[0].Y + dOffSet.Y),
new Point(SplitTab[1].X + dOffSet.X, SplitTab[1].Y + dOffSet.Y),
new Point(SplitTab[2].X + dOffSet.X, SplitTab[2].Y + dOffSet.Y),
new Point(SplitTab[3].X + dOffSet.X, SplitTab[3].Y + dOffSet.Y)
};
//描画
e.Graphics.FillPolygon(Brushes.Gray, dTab);
}
}
}