闪烁的窗户形式

时间:2017-03-24 08:33:45

标签: c# .net panel windows-forms-designer

Windows窗体中,创建多个面板(面板包含多个面板),每个面板具有不同的背景颜色,运行应用程序时,如果展开表单意味着, Panles摇晃几毫秒然后到达所需的位置。无法修复它。你能不能给我解决这个想法..

由于

Saravanan

2 个答案:

答案 0 :(得分:1)

在表单的resize事件中,当您调整面板大小时,在开头添加Layout.Suspend(),在结尾添加Layout.Resume()。这应该可以阻止震动。

摇晃基本上是因为当表单大小发生变化,并且子面板接收到调整自身大小的触发器时,它们都会在给定布局中尝试调整自身时产生恐慌和混乱。暂停布局时,UI上不显示实际的实时混乱,并且抖动消失,但结果不是您可能想到的。但是,先试试然后再决定。

答案 1 :(得分:0)

修复了它。使用此代码以避免在展开窗体时抖动。它被称为Flicker。

使用NameSpace:

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?