が に設定されていて、所有する背景色とは異なる背景色を設定するとToolStripStatusLabel
発生する問題があります。ToolStripStatusLabels の背景色が境界線の外側でにじみます。プロパティを Flat 以外の設定に設定しようとしましたが、成功しませんでした。BorderSides
All
StatusStrip
BorderStyle
以下に追加されたスクリーンショットでは、問題を確認できます。ティールの例はBorderStyle = Adjust
、長方形の外側に境界線を描画するためのものです。しかし残念なことに、国境は完全に消えてしまいます。
私が得たいのは、この手描きの例のように出血がまったくないことです.
これは、設定によって、またはの特定のメソッドを継承またはオーバーライドすることによって行うことができますToolStripStatusLabel
か? 私はプログラムによる解決策を受け入れていますが、どこから始めればよいかわかりません。ヒントがあれば大歓迎です。
以下のx4rf41とTaWの回答を組み合わせて実装されたソリューション
複数の回答を利用して正しい軌道に乗ったので、質問に最終的な解決策を追加しました。
ToolStripStatusLabel
クラスを拡張し、OnPaint
メソッドをオーバーライドしました。これにより、クラスのプロパティを利用して、通常どおりに描画する可能性がありましたが、にじみはありませんでした。
public partial class ToolStripStatusLabelWithoutColorBleeding : ToolStripStatusLabel
{
/// <summary>
/// Bugfix to prevent bleeding of background colors outside the borders.
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
Rectangle borderRectangle = new Rectangle(0, 0, Width - 1, Height - 1);
// Background
e.Graphics.FillRectangle(new SolidBrush(BackColor), borderRectangle);
// Border (if required)
if (BorderSides != ToolStripStatusLabelBorderSides.None)
ControlPaint.DrawBorder3D(e.Graphics, borderRectangle, BorderStyle, (Border3DSide)BorderSides);
// Draw Text if you need it
e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), 0,0);
}
}