Draw イベントに応答して、WinForms ToolTip コントロールの外観をカスタマイズしています。ツールチップの角の一部を丸くしたいだけです。ToolTip が最初に表示されたときにすべてが完璧に見えるように、すべてが機能しています。ただし、その後の表示では、丸みを帯びた長方形の塗りつぶされていない領域には、ToolTip が最初に表示されたときに背景にあったものが引き続き表示されます。
問題のスクリーンショット (どうやらインライン化する権利がありません): http://tinypic.com/r/30xa3w9/3
画像では、左上隅に残りのアーティファクトが表示されます。ここでは、次のように透明にする (灰色の背景を表示する) ようにします。
tinypic.com/r/mvn8eo/3 (複数のリンクを追加する権利もありません)
描画コードは次のとおりです。
private void ToolTip_Draw(object sender, DrawToolTipEventArgs args)
{
args.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
var rect = new RectangleF(0, 0, args.Bounds.Width, args.Bounds.Height);
using (var backBrush = new LinearGradientBrush(rect, Color.Silver, this.BackColor, 90))
{
using (var path = GetRoundedRectangle(rect, 10, 4, 4, 1))
{
args.Graphics.FillPath(backBrush, path);
args.DrawText();
}
}
}
GetRoundedRectangle 関数 (含まれていません) は、必要な丸みを帯びたジオメトリの適切な GraphicsPath を計算するだけです。
BackColor を Color.Transparent に設定した後、args.DrawBackground への呼び出しを追加しようとしましたが、実際には透明ではなく、フォームの背景の濃い灰色で領域を埋めただけでした。これは、典型的な「シミュレートされた」透明度だと思いますWinフォーム。
補足として、IsBalloon が true に設定されたカスタマイズされていない ToolTip は、正しい透明度を持つ長方形ではありません。
誰でもこの問題の修正を提案できますか?