2011-06-24 12 views
0

アプリケーションで完全に透明なモーダルフォームを使用したいと思います。部分的に透過的なイメージで塗りつぶすことができます。このために、フォームからすべての表示要素を削除して、以下のコードを取得しました。C# - ウィンドウ上の透明なモーダルフォーム

class WinScreenshotWindow : Form 
{ 
    public WinScreenshotWindow() 
    { 
     // Create from without erasing background with a color 
     // Going not to use transparent form instead, it will produce context menu bugs in textboxes for child form 
     this.SuspendLayout(); 
     this.MaximizeBox = false; 
     this.MinimizeBox = false; 
     this.ShowIcon = false; 
     this.ShowInTaskbar = false; 
     this.FormBorderStyle = FormBorderStyle.None; 
     this.StartPosition = FormStartPosition.Manual; 
     this.ControlBox = false; 
     this.Visible = false; 
     this.Size = new Size(100, 100); 
     this.Location = new Point(200, 200); 
     this.ResumeLayout(); 
    } 

    protected override void OnPaintBackground(PaintEventArgs e) 
    { 
     // Erase Background Windows message: 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     Rectangle clientRect = e.ClipRectangle; 
     e.Graphics.FillRectangle(Brushes.Transparent, clientRect); 
    } 
} 

    static void Main() 
    { 
     Form form = new Form(); 
     form.Size = new Size(400, 400); 
     form.Show(); 

     var ww = new WinScreenshotWindow(); 
     ww.ShowDialog(form); 
    } 

しかし、結果は奇妙なものです:私はのOnPaint()に記入削除すると、それがすべて表示されていない

Bug

。 質問は - なぜこれが起こるのですか?背景が透明であれば、なぜこのようにフォームが表示されますか?そして、このような状況で何ができるでしょうか?

助けてください。

+0

背景を塗っていないと、ランダムなピクセルが得られます。 TransparencyKeyを使用します。 –

答えて

1

赤い背景色を使用して枠線のないフォームを開き、TransparencyKey = redを設定する方が簡単ではないでしょうか?

+0

これはクールですが、透明キーとして1つの色を使用する必要があります。 TransparencyKey = Color.Transparencyは機能しません。透過キーの色の画像を持っていたらどうなりますか? – Zelzer

+0

@ Zelzer色があなたのキーと一致する場合、画像に穴を開ける危険性があります。その助言は、ライムグリーンやピンクのようなめったに使われていない色を選んでみることです(画像が何であるかによってまれですが)。 – LarsTech

関連する問題