我已经搞乱了几个月,而且我仍然不确定我能做些什么才能实现想要。
我需要构建一个真实的设备,即存在于现实世界中并且在其上有一个屏幕。到目前为止,我已经通过几种不同的方式完成了它,例如,使用面板来模拟层,等等。现在我正在使用代码构建每个控件。
问题是,有没有更好的方法来绘制这个屏幕? 我该如何调暗它,让它更暗或更清晰? 处理后我在面板后面保持透明背景。有没有办法消除这种鬼影效果?
提前致谢!
答案 0 :(得分:1)
基本上,您需要一个位于表单顶部的叠加层。
开源项目ObjectListView实现了类似的叠加层。我砍了一点就行了。
您可以在以下位置下载解决方案:
https://github.com/hamxiaoz/Misc/tree/master/DimScreen
构建解决方案并拖动轨迹栏,您可以看到窗体变暗。您可以点击叠加层。我想这就是你想要的。
答案 1 :(得分:1)
侵入性最小的方式可能是黑色或灰色的半透明覆盖层。只需根据需要调整透明度,直到它看起来像你想要的那样。
我不知道这是否有效,但至少应该说明这项技术:
using System;
using System.Drawing;
using System.Windows.Forms;
static class Utils {
public static Form Plexiglass(Form tocover) {
var frm = new Form();
frm.BackColor = Color.DarkGray;
frm.Opacity = 0.30;
frm.FormBorderStyle = FormBorderStyle.None;
frm.ControlBox = false;
frm.ShowInTaskbar = false;
frm.StartPosition = FormStartPosition.Manual;
frm.AutoScaleMode = AutoScaleMode.None;
frm.Location = tocover.Location;
frm.Size = tocover.Size;
frm.Show(tocover);
return frm;
}
}
答案 2 :(得分:0)
我添加了一些东西以提高效率。这是我的代码。
using System;
using System.Drawing;
using System.Windows.Forms;
static class Utils
{
static Form ChildForm;
public static Form OpenMask(Form tocover)
{
Form frm = new Form();
ChildForm = frm;
tocover.SizeChanged += AdjustPosition;
tocover.Move += AdjustPosition;
//frm.Move += AdjustPosition;
//frm.SizeChanged += AdjustPosition;
frm.BackColor = Color.Black;
frm.Opacity = 0.50;
frm.FormBorderStyle = FormBorderStyle.None;
frm.ControlBox = false;
frm.ShowInTaskbar = false;
frm.StartPosition = FormStartPosition.Manual;
frm.AutoScaleMode = AutoScaleMode.None;
//frm.Location = tocover.Location;
frm.Location = tocover.PointToScreen(System.Drawing.Point.Empty);
frm.Size = tocover.ClientSize;
frm.Show(tocover);
return frm;
}
public static void CloseMask()
{
if (ChildForm != null)
{
ChildForm.Close();
ChildForm.Dispose();
}
}
private static void AdjustPosition(object sender, EventArgs e)
{
Form parent = sender as Form;
if (ChildForm != null)
{
ChildForm.Location = parent.PointToScreen(System.Drawing.Point.Empty);
ChildForm.ClientSize = parent.ClientSize;
}
}
}