Windowsフォームの開発にはあまり慣れていません。透明なコントロールのグラフィックスをウィンドウでクリアする方法
私はちょうど周りの形を回転させる "やって忙しいんだよ"コンポーネントを作成しようとしています。私はこのコントロールを一時的にし、他のコントロールの上に描画します。クラスはControlから直接継承します。
は、だから私は、コンストラクタでこれを持っている:SetStyle(ControlStyles.Opaque, true);
と、この:私は他のコントロールの上に描画されますコントロールを取得します
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.ExStyle |= 0x20;
return parms;
}
}
を。
私の問題はこれです。私はスムーズなアニメーションの外観を与えるためにコントロールを数回数回書き直します。しかし、私は前のフレームで描かれたものをどのようにクリアするかを理解できません。 e.Graphics.Clear(Color.Transparent)
をOnPaint
に使用すると、コントロール全体が黒くなります。
コントロールの描画内容を消去する方法はありますか?
私は、コントロールのサイズを変更すると背景がクリアされることに気付きました。何もしないようにOnPaintBackgroundオーバーライド
- を動作しない
物事。または単にbase.OnPaintBackgroundを呼び出します。同じ結果。
親コントロール全体を無効にする必要はなく、ユーザーコントロールに対応する領域だけを無効にする必要があります。this.Parent.Invalidate(this.ClientRectangle、true); –
@エリック:チップをありがとう。私はちょうどそれをしたかもしれないと思う! – snicker
usercontrolが位置(0,0)にない限り、これは正しく動作しません。あなたは、usercontrolがカバーする親領域を無効にし、親座標を使用する必要があります。また、ユーザーコントロールにクライアント以外の透明な領域がある場合、この領域も無効化されません。私は 'this.Parent.Invalidate(new Rectangle(this.Location、this.Size)、true); ' – takrl