我有一个Windows Forms项目问题,我只能在Windows 10
机器上重现该问题(在Windows 7上可以正常工作)。我认为我可以找出问题的根源,也就是说,如果我打开双缓冲并将FormBorderStyle
设置为None
,那么如果我调整窗体的大小,例如在事件处理程序中,后台部分和某些控件未重绘。也是如此,有时它会起作用(五分之一)。
看起来没有重绘(通常有点不同):
,所以它看起来应该像:
要重现该问题,只需将几个控件置于表单上(可能数量也可能很重要),通过覆盖CreateParams
,FormBorderStyle=None
(使用另一种边框样式)来打开双缓冲有用!)。
后面的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
private bool small = true;
private void button1_Click(object sender, EventArgs e)
{
//toggle the form's size
Height = Height + 300*(small?-1:1);
small = !small;
}
private void button5_Click(object sender, EventArgs e)
{
Close();
}
}
问题:
是来自Windows 10
中MS的已知错误(或者可能是为了摆脱Windows窗体;))?
有什么想法吗?
双缓冲,没有边界。
更新:我有Win 10专业版:1703;版本15063.1155。
Update2:在Win 10 Pro版本上测试:1709;内部版本16299.492-同样的问题。
Update3:在Win 10 Home Version:1803上进行测试-更好的方法(我需要进行几分钟的测试才能重现它),但是仍然出现问题。该测试是在另一台装有另一张图形卡的计算机上完成的。
解决方法:
恐怕我必须采用这种解决方法A: Remove the title bar in Windows Forms,并将FormBorderStyle
设置为FixedToolWindow
。
答案 0 :(得分:1)
对我来说,这看起来像是操作系统中的错误,但是我发现如何在不放弃DoubleBuffering
和FormBorderStyle=None
的情况下使其正常工作。
如果窗口样式将扩展
cp.ExStyle |= 0x00080000; // Turn on WS_EX_LAYERED
然后一切正常。