问题描述
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; } } }