我最近几个月一直在做一个项目,有一个我无法解决的问题。我有一个带有控件的Windows表单。当用户更改控件大小时,app会触发sizechanged事件,然后相应地移动控件。主要的问题是按钮,因为它们有图像 - 实际上更精确 - 它们是平的,没有边框,并且上面有一个图像,它实际上是一个绘制的按钮(我不通过代码绘制它的原因是因为图像很复杂)。在某些机器上,当应用程序调整大小时,它们会开始闪烁。 Form设置为DoubleBuffered为true,我使用此函数在按钮上设置双缓冲区。
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);
}
有什么建议吗?
答案 0 :(得分:1)
当我遇到双缓冲问题时,这对我帮助很大。代码有点陈旧,但仍然涵盖了基础知识。
http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx
希望有所帮助。 :)