2009-07-29 4 views
2

他のすべての上にあるはずの文字列をどのように描画しますか? 私のパネルには、Panel1.Controlsにいくつかのユーザーコントロールがあります。だから私はPaintメソッドにこれを追加しました:C#オブジェクトの前に描画するには?

Graphics g = Panel1.CreateGraphics(); 
g.DrawString("BUSTED", new Font("Arial", 20f), new SolidBrush(Color.Black), new PointF(50, 50)); 

問題は、テキストがユーザーコントロールの後ろに印刷されていることであるので、それを見ることができません。 (私が開いている場所にテキストの位置を変更すると、正しく表示されます)。

アイデア?

+0

これは.NETの問題ではなく、C#の問題ではありませんか? C#は言語です。 .NETはフレームワークです。 –

+0

お使いの.NETのバージョンは? – Kazar

+0

私は.Net 3.5 – Patrick

答えて

2

すべてのウィンドウを決定し、それらそれぞれが独自のウィンドウハンドルとコントロールのzオーダー/親子を持っている意味、コントロールがHWNDベースとしているもののクリップものを形成します。パネルペイントイベントはパネルコントロールにペイントされますが、パネルコントロールの出力はすべての子コントロールによってクリップされます。

Windowsフォームで透明度が正しく機能しません。あなたが透明な背景を持つように何かを設定した場合、それは典型的にバックグラウンドの背景が見えるようになってしまい、それは直接の親ではありません。

私はさまざまな方法でこれを回避しました。

  1. すべてをビットマップにレンダリングして表示して、すべての合成を行います。これは静的コンテンツでのみ機能します。
  2. #1のようなものをレンダリングするウィンドウレスレンダリングモデルを作成し、マウスの構成要素とのやりとりも処理します。
  3. コントロールをオーバーレイし、目的のコンテンツをレンダリングする新しいトップレベルのレイヤードウィンドウ(WS_EX_LAYERED)を作成します。これにより、メッセージを通過させるための措置が取られていない限り、基礎となるコントロールとのやり取りが禁止されますこれは、Visual Studio 2008がWindowsフォームデザイナのサーフェスに使用するメソッドだと思います。
1

すべてのコントロールの上にあるパネルを追加してから描画してみてください。パネルは透明に設定する必要があります。

は、ここでの詳細情報です:Drawing on top of controls inside a panel (C# WinForms)

+0

を使用しています。その前に透明なパネルを作成する唯一の方法は、ウィンドウスタイルを使用していて、パネルをペイントしていないため、.NET 3.0以前は機能しません。 – Kazar

+0

Iは透明パネルの作成を試みた: パブリッククラスTransparentPanel:パネル {パブリックTransparentPanel(){ }保護オーバーライドCreateParamsをCreateParamsを {{ CreateParamsをCreateParamsを= base.CreateParamsを取得します。 createParams。ExStyle | = 0x00000020; // WS_EX_TRANSPARENT return createParams;私はそれを適用するときに }} 保護されたオーバーライドボイドOnPaintBackground(PaintEventArgsのe)の { }} をしかし、すべてはただぼやけています。 – Patrick

+0

私はあなたのコードを試して、私はぼやけを取得しません。 –

0

どのパネルでのOnPaintをオーバーライドし、ベース塗料後に描画コードを書くことについてはどうですか?

class DrawingPanel : Panel { 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     // Your drawing code here 


    } 
} 
1

これはうまくいきますが、パネル内のすべてのユーザーコントロールでSendToBackを試してみると、テキストが上に表示される可能性があります。

+2

代わりに、 'BringToFront'上 :私のような何かをしたい http://www.pafo.net/error.jpg : と私はこの結果を得ましたあなたが望むコントロール。 –

関連する問題