在设置了TransparencyKey的Winform首次显示时删除黑色闪烁

时间:2012-05-04 16:31:29

标签: winforms transparency flicker

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

   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,然后单击Run,我会得到相同的结果。

我尝试过的事情:

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

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

  3. 将窗口显示为较小,或宽度为0或关闭屏幕,然后移至所需位置 - 导致显示问题,即表单后面的窗口无法正确重绘。

  4. 设置ControlStyles.Opaque,ControlStyles.UserPaint和其他几个ControlStyles组合并覆盖不同的paint / background-paint事件 - 各种结果,相同的闪烁,更糟的闪烁或不透明的形式。

  5. 转移到WPF可能是一个选项,但不是真的在寻找“使用WPF”作为答案。

1 个答案:

答案 0 :(得分:4)

Opacity设置为0.01。

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

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

编辑:更新了清洁工作为Tergiver建议