在 Windows 8.1 上加载时 WinForms 闪烁
WinForms flickers when loading on Windows 8.1
当我的 Windows 表单最初加载到 Windows 8.1 时,我遇到了一些闪烁效果。
起初我尝试了一些涉及启用 DoubleBuffered 的解决方案,但似乎并没有解决问题。后来我遇到了下面的解决方案,很多人说解决了他们所有的问题。但是,当我在我的 Windows 8.1 计算机上尝试修复时,它现在闪烁着一个黑框。
为了进一步研究这个问题,我尝试了下面 MSDN link 中的示例代码。但是,当加载表单时,这也会显示一个黑框。我试过在 'Advanced System Settings'->'Advanced'->'Performance Settings'->'Visual Effects' 中弄乱 Windows 8.1 视觉设置,看看是否有 Aero 或类似的透明度功能对此有任何影响,但我仍然得到一个闪烁的黑框。
None 各个线程中对此 'fix' 的评论似乎是最近的。我想知道这个 'fix' 是否应该适用于 Windows 8/8.1,如果还有其他任何东西,我可以尝试让表单及其控件立即全部显示而不会出现任何闪烁。
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
How to fix the flickering in User controls
我能够使用下面的代码让我的表单及其所有控件同时显示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
this.Opacity = 0;
SampleExpensiveCreateControlOperation();
}
private void SampleExpensiveCreateControlOperation()
{
for (int ix = 0; ix < 30; ++ix)
{
for (int iy = 0; iy < 30; ++iy)
{
Button btn = new Button();
btn.Location = new Point(ix * 10, iy * 10);
btn.BackColor = Color.Red;
this.Controls.Add(btn);
}
}
}
private void Form1_Shown(object sender, EventArgs e)
{
this.Refresh();
this.Opacity = 1;
}
}
当我的 Windows 表单最初加载到 Windows 8.1 时,我遇到了一些闪烁效果。
起初我尝试了一些涉及启用 DoubleBuffered 的解决方案,但似乎并没有解决问题。后来我遇到了下面的解决方案,很多人说解决了他们所有的问题。但是,当我在我的 Windows 8.1 计算机上尝试修复时,它现在闪烁着一个黑框。
为了进一步研究这个问题,我尝试了下面 MSDN link 中的示例代码。但是,当加载表单时,这也会显示一个黑框。我试过在 'Advanced System Settings'->'Advanced'->'Performance Settings'->'Visual Effects' 中弄乱 Windows 8.1 视觉设置,看看是否有 Aero 或类似的透明度功能对此有任何影响,但我仍然得到一个闪烁的黑框。
None 各个线程中对此 'fix' 的评论似乎是最近的。我想知道这个 'fix' 是否应该适用于 Windows 8/8.1,如果还有其他任何东西,我可以尝试让表单及其控件立即全部显示而不会出现任何闪烁。
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
How to fix the flickering in User controls
我能够使用下面的代码让我的表单及其所有控件同时显示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Shown += Form1_Shown;
this.Opacity = 0;
SampleExpensiveCreateControlOperation();
}
private void SampleExpensiveCreateControlOperation()
{
for (int ix = 0; ix < 30; ++ix)
{
for (int iy = 0; iy < 30; ++iy)
{
Button btn = new Button();
btn.Location = new Point(ix * 10, iy * 10);
btn.BackColor = Color.Red;
this.Controls.Add(btn);
}
}
}
private void Form1_Shown(object sender, EventArgs e)
{
this.Refresh();
this.Opacity = 1;
}
}