我必須在我的TableLayoutPanel
上禁用OnPaintBackground
以消除由於首先繪製背景而導致的閃爍(因爲我使用paint方法繪製TLP,並且是的我需要TLP,因爲它包含許多用於某種目的的控制)。所以我的代碼如下:覆蓋OnPaintBackground使設計器視圖出現異常
public static bool FlickerPanel = false;
public class FlickerTableLayoutPanel : TableLayoutPanel
{
protected override void OnPaintBackground(PaintEventArgs e)
{
if (FlickerPanel)
base.OnPaintBackground(e);
}
}
然後在我的繪畫方法中,我畫了它自己的背景。所以在運行時它很好。
編輯:我發現了問題的根源。通過重寫OnPaintBackground,可以禁用任何讓設計者繪製背景的代碼。如果我一起刪除覆蓋它沒有圖形故障。
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
}
即使上面的代碼禁用了設計視圖渲染並導致圖形故障。任何幫助非常感謝!
你不能只跳過OnPaintBackground使用,這也正是吸引TLP本身。在基礎調用之後添加e.Graphics方法調用您想要的方法。如果這仍然太明顯,那麼添加一個構造函數並將DoubleBuffered屬性設置爲true。 –
經過一番研究,我認爲Hans Passant建議的DoubleBuffered屬性可以做到這一點。 –
@HansPassant太棒了! DoubleBuffered屬性確實有效。所以我把'public TLP(){base.DoubleBuffered = true; }'它的工作!這與重寫默認構造函數是一樣的嗎?我應該在這裏添加原始默認構造函數嗎? – CodeCamper