【问题标题】:Drawing black rectangle on top of all controls in a c# winform在c#winform中的所有控件之上绘制黑色矩形
【发布时间】:2012-07-20 22:50:17
【问题描述】:
我目前正在开发一款用于游戏制作的 TileEditor 软件。
几乎一切都进行得很顺利。这就是问题所在。
我非常努力地实现了这一目标,但没有任何成功。
让我们从 WinForm 的屏幕截图开始。
您可能已经了解了该应用程序的工作方式。
所以,我想在整个表单上绘制一个半透明的黑色矩形,除了平铺选择面板(右侧面板)。我已经有了找到矩形的正确点和位置的功能,这样它就不会出现在右侧面板上。
虽然当我尝试绘制它时,它是在控件下方绘制的。有没有办法在这种形式的所有内容之上绘制矩形?
(照片处理)
非常感谢您的宝贵时间,真的很感激。
抱歉英语不好,这不是我的第一语言。
【问题讨论】:
标签:
c#
winforms
system.drawing
【解决方案1】:
最简单的方法可能是创建一个独立的、无边框、半透明的表单,并在您的设计表单上浮现烟熏玻璃效果。禁用它,以便鼠标点击等进入底层表单。
(你的英语很好)。
【解决方案2】:
您可以创建下面的控件,该控件创建底层控件的图像,然后在其上绘制一个半透明的黑色矩形。您可以将其放置在表单上要变暗的控件上方以及要保持亮起的控件下方。然后,您可以根据需要设置它的可见性。
class OverlayShadow : Control
{
protected override void OnPaint(PaintEventArgs e)
{
if (Parent != null) {
Bitmap behind = new Bitmap(Parent.Width, Parent.Height);
foreach (Control c in Parent.Controls)
if (c.Bounds.IntersectsWith(this.Bounds) & c != this)
c.DrawToBitmap(behind, c.Bounds);
e.Graphics.DrawImage(behind, -Left, -Top);
behind.Dispose();
}
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(128, 0, 0, 0)), Bounds);
}
}