我创建了一个简单的程序,现在我正处于设计阶段。我有一个多个面板,我可以看到/不可见,以切换"标签" (EG.1面板用于登录屏幕,1面板用于创建帐户屏幕)。现在我已经让这些面板变得不可见,因为我希望它们只是作为容器能够快速移动控件并创建按钮。
我的问题是我已经将我的表格背景图像设置为我在photoshop中制作的图像,每当我在面板之间切换时,它就会闪烁,每当我使用系统颜色(白色,黑色)时,我都不会这样做。发生了。 我有什么方法可以消除闪烁吗?
我试过了:
我的代码非常基础:
private void btnNewAcc_Click(object sender, EventArgs e)
{
PanelNewAccount.Visible = true;
PanelLogin.Visible = false;
}
答案 0 :(得分:0)
尝试将表单属性DoubleBuffered设置为true,在winforms中通常会发生闪烁,因为GDI +正在尝试多次绘制控件,因此在这种情况下DoubleBuffering图形应该会有所帮助
form.DoubleBuffered = true;
答案 1 :(得分:0)
感谢Patrick我解决了我的问题, 而不是使用面板我正在使用TabControl,我为每个选项卡分配了相同的背景。 就像添加动态按钮一样容易。 与面板功能相同但没有闪烁。
答案 2 :(得分:0)
#region .. Double Buffered function ..
public static void SetDoubleBuffered(System.Windows.Forms.Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
return;
System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
aProp.SetValue(c, true, null);
}
#endregion
#region .. code for Flucuring ..
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
即使我迟到了,但如果其他人也遇到同样的问题,那么即使我不知道它是如何工作的,这段代码也为我解决了闪烁问题。 我找到了here。 在您的程序中添加上述代码片段,并在您的应用程序的构造函数中添加以下行:
SetDoubleBuffered(YourPanelName);