2017-03-24 116 views
-2

Windows窗體,創建多面板的(面板的包含多個面板的),每個小組的有不同的背景顏色,當運行應用程序,如果擴大形式手段,在Panles越來越搖動幾毫秒,然後到達需要的地方。不能修復它。你能給我的想法來解決這個..閃爍的窗戶形式

感謝

Saravanan

回答

0

固定it.Use這個代碼,以避免震動,同時擴大窗戶的形式。它正是所謂的閃爍。

使用的命名空間:

Using System.Runtime.InteropServices 

創建一個類,並編寫代碼:

internal static class NativeWinAPI 
{ 
    internal static readonly int GWL_EXSTYLE = -20; 
    internal static readonly int WS_EX_COMPOSITED = 0x02000000; 

    [DllImport("user32")] 
    internal static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

    [DllImport("user32")] 
    internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int  dwNewLong); 
}  

,並在窗體構造函數中添加代碼:

public MyForm() 
{ 
    InitializeComponent(); 

    int style = NativeWinAPI.GetWindowLong(this.Handle,NativeWinAPI.GWL_EXSTYLE); 
    style |= NativeWinAPI.WS_EX_COMPOSITED; 
    NativeWinAPI.SetWindowLong(this.Handle, NativeWinAPI.GWL_EXSTYLE, style); 
} 

我得到這個結果來自: Avoid Flickering in Windows Forms?

所有感謝您的回覆中
1

在窗體的resize事件,當你調整你的面板,在開始和Layout.Resume添加Layout.Suspend()( ) 最後。這應該停止搖晃。

晃動基本上是因爲當窗體大小變化,以及子面板接收觸發來調整自己,他們都製造恐慌和混亂之中自己在努力調整自己在給定的佈局。當您暫停佈局時,實際活動混亂不會顯示在用戶界面上,並且震動消失,但結果不是您可能想到的。但是,先試試然後再決定。

+0

首先,我爲我的形式私人無效myform_Resize(對象發件人,EventArgs的){ this.SuspendLayout創建的事件(); this.ResumeLayout(); }但同樣的震動再次發生..我做的方式是否正確? – User6667769

+0

以及我在運行時沒有添加任何控件 – User6667769

+0

嗯......我想不是。如果它不在Form_Resize()中,你在調整面板的位置?你是否將它們停靠在窗體上? – athar13