问题描述

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;
        }
    }
}

 

posted on 2019-04-27 22:04  shenx1ao  阅读(217)  评论(0编辑  收藏  举报