使用透明度键设置删除首次显示Winform时的黑色闪烁



以下代码在显示表单(透明(之前在屏幕上产生黑色闪烁,我想知道删除该闪烁的选项是什么?

   Form f = new Form();
   f.BackColor = Color.Lime;
   f.TransparencyKey = f.BackColor;
   f.StartPosition = FormStartPosition.Manual;
   f.Bounds = Screen.PrimaryScreen.WorkingArea;
   f.Show();

如果我创建一个新项目,将表单的背景设置为 Lime,将 TransparencyKey 设置为 Lime,然后单击"运行",我会得到相同的结果。

我尝试过的事情:

  1. 将不透明度设置为 99% -- 相同的闪烁

  2. 在OnCreateParams中强制WS_EX_COMPOSITED或使用SetWindowLong - 相同的闪烁

  3. 显示窗口较小,或宽度为 0,或屏幕外,然后移动到所需位置 - 导致错误的显示问题,其中窗体后面的窗口无法正确重绘。

  4. 设置 ControlStyles.Opaque、ControlStyles.UserPaint 和其他几个 ControlStyles 组合并覆盖不同的绘制/背景绘制事件 -- 各种结果,要么是相同的闪烁,要么是更糟糕的闪烁,要么是表单不透明。

迁移到 WPF 可能是一种选择,但并不是真正寻找"使用 WPF"作为答案。

Opacity设置为 0.01。

如果您需要表单(或部分表单(可见 - 请在表单创建完成后重新设置不透明度:

Form f = new Form { Opacity = 0.01 };
f.Show();
f.BeginInvoke( new Action(() => f.Opacity = 0.99 ));

编辑:更新了Tergiver建议的清洁器

最新更新