我想通过C#覆盖整个屏幕上的灰色半透明区域。这可以通过Windows Forms完成吗?我将如何做到这一点?
答案 0 :(得分:8)
当然,只需创建一个覆盖所有桌面屏幕的无边框半透明窗口。
您可以使用以下LINQ找到正确的矩形以覆盖所有屏幕:
Rectangle bounds = Screen.AllScreens
.Select(x => x.Bounds)
.Aggregate(Rectangle.Union);
然后从bounds
答案 1 :(得分:2)
除了使用Johannes的建议将'FormBorderStyle属性设置为'None,我还要在此窗体上设置以下属性,用于“调暗”屏幕:
我在Form的Load事件中设置了“dim-out”Form的大小:我会使用Rob的答案中的优雅代码来设置添加到项目中的Form的边界,如果我想处理多个监视器的情况。如果我只想处理一台显示器,我会做一些简单的事情:
// in the Load Event of the "dim-out" Form
this.Bounds = Screen.PrimaryScreen.Bounds;
然后,当然,当您需要回复可见表格上的任何内容时,您可以显示此“暗淡”表格。
显示“dim-out”表单将使其显示在Application的其他可见表单之上(除非其中一个表单设置了TopMost或TopLevel属性)。
但是你可以实现的一个很好的效果就是在显示MessageBox(或模态显示的Form)之前显示你的“dim-out”表单:这意味着你将拥有MessageBox对话框(或模态形式)“在前面“与其背后的一切”都显得黯淡。“
所以这里是你的代码显示“暗淡”形式的样子:
dimmedForm.Show();
// change these to suit your taste or purpose
// this.BringToFront();
// dimmedForm.BringToFront();
// example of showing a MessageBox over the dimmedForm
// which will block the current thread
MessageBox.Show("why not ?");
// now hide the dimmedForm
dimmedForm.Hide();
您可能想要查看'TopLevel属性(在设计时未公开)并刷新您对该属性如何影响屏幕上的Form顺序的了解,以及检查'TopMost属性表格(在设计时暴露)。