Windowsフォームの透明コントロールのグラフィックスをクリアする方法
-
05-07-2019 - |
質問
だから、私はWindowsフォームの開発にはあまり慣れていません。
「ちょっと忙しい」を作成しようとしています。形状を回転させるだけのコンポーネント。このコントロールは一時的であり、他のコントロールの上に描画する必要があります。クラスはControlから直接継承します。
だから私はこれをコンストラクタに持っています:
SetStyle(ControlStyles.Opaque, true);
そしてこれ:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
他のコントロールの上に描画するコントロールを取得します。
今、私の問題はこれです。スムーズなアニメーションの外観を与えるために、1秒間に数回コントロールを再描画します。ただし、前のフレームで描画されたものをクリアする方法がわかりません。 OnPaint
で e.Graphics.Clear(Color.Transparent)
を使用すると、コントロール全体が黒になります。
コントロールの描画内容をクリアする方法はありますか?
コントロールのサイズを変更すると背景がクリアされることに気付きました。
動作しないもの
- 何もしないためにOnPaintBackgroundをオーバーライドします。または、単にbase.OnPaintBackgroundを呼び出します。同じ結果。
解決
さて、私はここで解決策を見つけました: http://www.bobpowell.net/transcontrols.htm
透明な背景を保持するには、実際に親コントロールを無効にする必要があります。
他のヒント
この記事が提示するOnPaintBackgroundをオーバーライドする必要がある場合があります: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html
OnPaintBackgroundを強制的に呼び出すためにコントロールをクリアする必要がある場合、コントロールを無効にする必要がある場合があります。