在c#winform中的所有控件上绘制黑色矩形

时间:2012-07-20 22:50:18

标签: c# winforms system.drawing

我目前正在开发一款用于游戏制作的TileEditor软件。 几乎一切都很顺利。这是问题所在。

我努力实现这一目标而没有任何成功。 让我们从WinForm的屏幕截图开始。

Screenshot of the application without the black square 您可能已经确定了应用程序的工作方式。

所以,除了瓷砖选择面板(右侧面板)之外,我想在整个表格上画一个半透明的黑色矩形。我已经有了找到矩形的正确点和位置的功能,以便它不会出现在右侧面板上。

虽然当我尝试绘制它时,它会在控件下方绘制。有没有办法在这样的表格中的所有内容上绘制矩形?

(Photoshoped) Black rectangle over form 非常感谢你的时间,真的很感激。 抱歉英语不好,这不是我的第一语言。

2 个答案:

答案 0 :(得分:3)

最简单的方法可能是采用独立的,无边框,半透明的形式,并在您的设计形式上浮动烟熏玻璃效果。禁用它以便鼠标点击等依次落到底层表单。

(你的英语很好)。

答案 1 :(得分:1)

您可以在下面创建控件,创建底层控件的图像,然后在其上绘制一个半透明的黑色矩形。您可以将此格式放在要变暗的控件上以及要保持亮起的控件下方。然后,您可以根据需要设置它的可见性。

    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);
        }
    }