ese*_*elk 1 transparency flicker winforms
以下代码在显示表单之前(透明地)在屏幕上产生黑色闪烁,我想知道我有哪些选项可以消除该闪烁?
Form f = new Form();
f.BackColor = Color.Lime;
f.TransparencyKey = f.BackColor;
f.StartPosition = FormStartPosition.Manual;
f.Bounds = Screen.PrimaryScreen.WorkingArea;
f.Show();
Run Code Online (Sandbox Code Playgroud)
如果我创建一个新项目,将表单的背景设置为 Lime,将 TransparencyKey 设置为 Lime,然后单击运行,我会得到相同的结果。
我尝试过的事情:
将不透明度设置为 99%——同样的闪烁
在 OnCreateParams 中强制 WS_EX_COMPOSITED 或使用 SetWindowLong -- 同样闪烁
将窗口显示得更小,或 0 宽度,或关闭屏幕,然后移动到所需位置 - 导致显示错误,我的窗体后面的窗口无法正确重绘。
设置 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 ));
Run Code Online (Sandbox Code Playgroud)
编辑:更新了 Tergiver 建议的清洁器
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |