是否可以在窗体上方绘制,覆盖所有控件?我有一些控件(文本框、按钮、COM对象)在我的窗体上,并且我想要在它们的上面作图,覆盖之前由它们绘制的像素。我正在使用C#中的Windows Forms。注意:Graphics类在控件下方作图...
我知道我来晚了,而且接受的答案没有问题,但我觉得它太复杂了,有点难以理解,所以我想出了一个“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
设置为Transparent
,Enable
设置为false
。
3. 现在,在OnPaint
中绘制的所有内容都将"覆盖"任何控件,并且不会"阻挡"任何可交互的控件,如TextBox
。