我想通过C#在整个屏幕上覆盖一个灰色的、半透明的区域。通过Windows窗体可以做到这一点吗?我该如何开始呢?
发布于 2010-02-01 20:49:30
当然,只要创建一个覆盖所有桌面屏幕的无边框、半透明窗口即可。
您可以使用以下LINQ找到正确的矩形来覆盖所有屏幕:
Rectangle bounds = Screen.AllScreens
.Select(x => x.Bounds)
.Aggregate(Rectangle.Union);然后从bounds设置窗口的左、上、宽和高
发布于 2010-02-01 22:44:38
除了使用约翰尼斯的建议将'FormBorderStyle属性设置为'None‘之外,我还在这个表单上设置了以下属性,用于“淡出”屏幕:
我在窗体的Load事件中设置了“淡出”窗体的大小:如果我想处理多个监视器的情况,我会使用Rob回答中的优雅代码来设置添加到项目中的窗体的边界。如果我只想处理一个监视器,我会做一些简单的事情,比如:
// in the Load Event of the "dim-out" Form
this.Bounds = Screen.PrimaryScreen.Bounds;然后,当然,您可以在需要时显示此“淡出”表单,以响应可见表单上的任何内容。
显示“淡出”表单将使它出现在应用程序的其他可见表单的顶部(除非其中一个表单设置了TopMost或TopLevel属性)。
但是,您可以实现的一个很好的效果是在MessageBox (或以模式显示的表单)显示之前显示您的“淡出”表单:这意味着您将使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属性(该属性在设计时不公开),刷新有关该属性如何影响屏幕上窗体顺序的知识,并检查窗体的'TopMost属性(它在设计时公开)。
https://stackoverflow.com/questions/2176648
复制相似问题