2009-08-19 27 views
1

當我將非矩形區域應用於Windows窗體(可以說是橢圓)時,我正面臨一種奇怪的行爲。問題在於,當初始調整大小時,表單似乎會消失片刻(就像該區域爲空)。它看起來像一個輕微的閃爍,而表單後面的桌面內容在秒的幾分之一時間內可見。在第一次調整大小後,此閃爍不再可觀察。將區域應用於窗體時的問題

這可以通過簡單地創建一個Windows窗體項目,並通過使用形式爲邊界矩形爲橢圓的大小(以這種方式將一個橢圓區域的形式,你將能夠因此調整形式複製其邊界不會完全被該地區「吃掉」)。

注意:我正在更新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 2009-08-19 08:27:13

0

你在同一區域固定一個巨大的問題,對我來說。

我使用這個:

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

和它的作品無閃爍。所以值得一試!