カスタム描画されたコントロールは、透明であってもその背後にあるコントロールをレンダリングしません
-
05-07-2019 - |
質問
現在、カスタムデザインのタブコントロールを作成しています。 TabControlを所有者が描画するのではなく、独自のコントロールを作成しました。これは、TabControlがより高速で柔軟性が高いと考えたためです。私のタブコントロールは、VS2008タブコントロールの後にスタイルを設定します。つまり、タブが選択されると、そのタブの一部は選択されていない他のタブの前になります。
タブコントロールは、実際のタブ自体であるすべてのTabButtonオブジェクトを含むパネルで構成されます。 TabButtonを次のように透明に設定しました。
public TabButton()
{
...
SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
this.BackColor = Color.Transparent;
}
ただし、タブが選択され、別のタブの前にある場合、選択されていないタブの、選択されたタブの一部の後ろに表示される部分はレンダリングされません。これは、選択したボタンの残りのクリッピング四角形を塗りつぶす標準の SystemColors.Control
色です。
カスタムコントロールで適切な透明性を実現するにはどうすればよいですか
また:TabButtonはControlを継承するため、透明度を使用するには SetStyle
を使用する必要がありました。
-Eric Smith
解決
こちらをご覧ください: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
前回、.NET Windows Formsを使用していたときに、これらの疑似ハッキングのいくつかを実行して透明性を確保する必要があることは容易にはわかりませんでした。過去3年以内に変更されたかどうかはわかりませんが、このようなことをしたことを覚えています。最初に背景を描画しないでください。