可以在表单上绘制,覆盖所有控件吗?

6
是否可以在窗体上方绘制,覆盖所有控件?我有一些控件(文本框、按钮、COM对象)在我的窗体上,并且我想要在它们的上面作图,覆盖之前由它们绘制的像素。我正在使用C#中的Windows Forms。注意:Graphics类在控件下方作图...

你能展示一下你目前在主窗体上绘制的代码吗? - Scott Chamberlain
我知道这是一个WinForms的问题,但我忍不住要提一下WPF内置了Adorner Layers。 - Amittai Shapira
1个回答

0

我知道我来晚了,而且接受的答案没有问题,但我觉得它太复杂了,有点难以理解,所以我想出了一个“hack”的方法。

1. 使用以下代码创建自定义Panel

public class TransparentPanel : Panel
{
    protected override void OnPaint(PaintEventArgs e)
    {
        
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT

            return cp;
        }
    }
}

2. 创建一个与Form大小完全相同的TransparentPanel,将其置于当前Form上的每个控件之上,并将其设置为最前端,将其BackColor设置为TransparentEnable设置为false

3. 现在,在OnPaint中绘制的所有内容都将"覆盖"任何控件,并且不会"阻挡"任何可交互的控件,如TextBox


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接