2009-08-19 22 views
1

Windowsフォームに長方形以外の領域を適用すると、奇妙な動作に遭遇します(楕円形と言えます)。問題は、最初にサイズを変更したときにフォームが(領域が空であるかのように)一瞬消えてしまうように見えることです。フォームの背後にあるデスクトップの内容は秒の数分の1に見えるようになりますが、わずかなフリッカーのように見えます。最初のリサイズ後、このフリッカーはもはや観測できません。フォームに領域を適用するときの問題

これは、楕円の境界矩形としてフォームのサイズを使用して、フォームに楕円領域を適用するだけで再現できます(このようにしてフォームのサイズを変更できるようになります)。その国境は国によって完全に「食べられる」わけではない)。

注:OnResizeイベントでフォームの領域を更新しています。

protected override void OnResize(EventArgs e) 
{ 
    base.OnResize(e); 
    GraphicsPath path = new GraphicsPath(); 
    path.AddEllipse(new Rectangle(Point.Empty, this.Size)); 

    this.Region = new Region(path); 
} 

これを引き起こしている可能性がありますどのような任意のアイデア:

私が使用していたコードは、以下のように見えますか?

クイックフォローアップ:

私はOnSizeChangedイベントに同じコードスニペットを入れたときに、ちらつきが消えるか、めったに起こらないように見えることに気づきました。

ありがとうございます!

答えて

1

はあなたが同じ地域に私のために大規模な問題を修正しましたPaintイベント

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
GraphicsPath path = new GraphicsPath(); 
path.AddEllipse(new Rectangle(Point.Empty, this.Size)); 
this.Region = new Region(path); 
} 
+0

フォームのサイズが変更されていなくても、Paintイベントが複数回発生するため、それほど大きなオーバーヘッドはありませんか?私は、各WM_PAINTメッセージではなく、フォームのサイズが変更されたときにのみ領域を更新しなければならないと思いますか? – WorldIntruder

0

を処理します。

private void BorderedPanel_SizeChanged(object sender, EventArgs e) 
    { 
     this.Region = new Region(RoundedRectangle.CreatePlusOne(this.ClientRectangle, this.cornerRadius, this.RectangleCorners)); 
     Refresh(); 
    } 

をし、それがちらつきなしで動作します:

私はこれを使用しています。だからショットをつける価値がある!

関連する問題