問題描述 C# 桌面程式開發中,經常遇到的一個問題就是窗體閃爍,這與窗體繪製有關。像這種不屬於業務邏輯問題的頑疾,解決起來很是麻煩,這裡將給出一個解決方法幫助桌面程式員。雖然沒有真正從窗體繪製的層面讓窗體不閃爍,但用起來確實覺得有效好用。 解決方法 在窗體載入之前,設置為透明窗體,併在窗體真正顯示時 ...
問題描述
C# 桌面程式開發中,經常遇到的一個問題就是窗體閃爍,這與窗體繪製有關。像這種不屬於業務邏輯問題的頑疾,解決起來很是麻煩,這裡將給出解決方法幫助桌面程式員。
解決方法之一:
在窗體載入之前,設置為透明窗體,併在窗體真正顯示時取消透明。這不是讓窗體不閃爍,而是讓用戶看不到閃爍的過程。
public static DialogResult ShowModalDialog(this Form sourceObject, IWin32Window owner, bool showInTaskbar, string windowTitle) { sourceObject.Opacity = 0; sourceObject.ShowInTaskbar = showInTaskbar; sourceObject.Text = windowTitle; sourceObject.Shown -= Form_Shown; sourceObject.Shown += Form_Shown; return sourceObject.ShowDialog(owner); } private static void Form_Shown(object sender, EventArgs e) { Form sourceObject = (Form)sender; sourceObject.Shown -= Form_Shown; Application.DoEvents(); sourceObject.Opacity = 1; }
解決方法之二:
如果正在使用的是 Devxpress Winforms 控制項,則可以定義一個基類窗體,並按照下麵代碼重寫 ShowMode 屬性。
public partial class XtraWindow : DevExpress.XtraEditors.XtraForm { protected override FormShowMode ShowMode { get { return FormShowMode.AfterInitialization; } } }