gpt4 book ai didi

c# - 避免 Windows 窗体中的闪烁?

转载 作者:太空狗 更新时间:2023-10-29 19:49:37 25 4
gpt4 key购买 nike

双缓冲不适用于组合框。有没有其他方法可以避免在 Windows 窗体中闪烁?

我有一个窗体,里面有许多面板。根据我的菜单选择,我一次只显示一个面板。

我有一个图标面板、一个标题面板和组合框。基于该组合框的选定项目,gridview1 和 2 正在填充。当我使用键盘向下箭头快速选择组合框项目时,图标面板和标题面板总是重新绘制。我需要保持两者不变。当我更改组合框选择的索引时,这两个面板会产生一些闪烁效果(即,它们正在闪烁或闪烁)。有什么办法可以避免这种闪烁。?我尝试在表单构造函数和表单加载事件中启用双缓冲。请帮忙....................

InitializeComponent();
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, false);
this.SetStyle(ControlStyles.Opaque, false);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);

我在表单构造函数和表单加载事件中尝试了这段代码

最佳答案

另一种解决方案:

//TODO: Don't forget to include 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);
}

在上面的代码中,您可以将 this.Handle 更改为 MyFlickeringPanel.Handle

您可以在这里阅读更多相关信息:Extended Window Styles在这里:CreateWindowEx .

With WS_EX_COMPOSITED set, all descendants of a window get bottom-to-top painting order using double-buffering. Bottom-to-top painting order allows a descendent window to have translucency (alpha) and transparency (color-key) effects, but only if the descendent window also has the WS_EX_TRANSPARENT bit set. Double-buffering allows the window and its descendents to be painted without flicker.

关于c# - 避免 Windows 窗体中的闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12813752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com