2010-03-16 19 views
0

我正在一個Windows窗體項目和UserControl雙緩衝有一些問題。 我創建了一個用戶控件,並有一個背景圖像,然後在它上面我有幾個單選按鈕和標籤。單選按鈕和標籤都具有透明背景顏色。 但是,當我顯示並隱藏用戶控件時,可以看到具有透明背景的標籤和單選按鈕上的閃爍。標籤backgrond彈出一個WinForms用戶控件已啓用背景圖像

我試着

Me.SetStyle(ControlStyles.DoubleBuffer _ 
Or ControlStyles.AllPaintingInWmPaint _ 
Or ControlStyles.UserPaint _ 
Or ControlStyles.SupportsTransparentBackColor, _ 
True) 

的InitializeComponent()後,使該用戶控制雙緩衝,但它似乎並沒有工作。

回答

3

這不是雙緩衝可以解決的閃爍的來源。當UC重新繪製自己時,它會繪製背景圖像,從而在控制進行的地方留下漏洞。然後控件各自進行自己的繪畫,首先要求UC再次繪製自己以產生背景像素,然後將自己繪製在頂部。臨時洞是你看到的閃爍。

您可以通過允許UC在控件的客戶區中繪製自己以使其背景已正確設置,從而使其不太令人反感。將此代碼粘貼到UserControl類中:

protected override CreateParams CreateParams { 
    get { 
    var parms = base.CreateParams; 
    parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN 
    return parms; 
    } 
} 

這不會使繪畫更快,並且可能會產生副作用。如果這仍然是一個問題,那麼你需要使BackgroundImage的繪製速度更快。將其預先縮放到用戶控件的客戶端大小,以便在不重新縮放的情況下繪製它。對於位圖使用PixelFormat.Format32bppPArgb格式,它比大多數視頻適配器上的任何其他格式快大約10倍。

+0

這解決了我的問題,謝謝。 – user294720 2010-03-16 14:13:00