2009-10-22 6 views
6

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オーバーライド

  1. を動作しない

    物事。または単にbase.OnPaintBackgroundを呼び出します。同じ結果。

答えて

4

さて、私はここに解決策を見つけた: http://www.bobpowell.net/transcontrols.htm

親コントロールは、実際に透明な背景を保持するために無効にされなければなりません。

+1

親コントロール全体を無効にする必要はなく、ユーザーコントロールに対応する領域だけを無効にする必要があります。this.Parent.Invalidate(this.ClientRectangle、true); –

+0

@エリック:チップをありがとう。私はちょうどそれをしたかもしれないと思う! – snicker

+1

usercontrolが位置(0,0)にない限り、これは正しく動作しません。あなたは、usercontrolがカバーする親領域を無効にし、親座標を使用する必要があります。また、ユーザーコントロールにクライアント以外の透明な領域がある場合、この領域も無効化されません。私は 'this.Parent.Invalidate(new Rectangle(this.Location、this.Size)、true); ' – takrl

2

あなたはこの記事が提示していることOnPaintBackgroundオーバーライドする必要があります。http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

はまた、それが呼ばれるようにOnPaintBackgroundを強制的にクリアする必要があるときにコントロールを無効にする必要があるかもしれません。

+0

これで問題は解決しません。私は前にコントロールを無効にしていました。しかし、ありがとう。 – snicker

+0

しかし、私はそのページのコメントで実際のソリューションのリンクを見つけました。だから+1してありがとう。 – snicker

+0

すべてのコントロールがツールチップのようにonpaintbackgroundをオーバーライドできない – Mike

関連する問題