我是否可以在form
上绘制ABOVE所有控件?
我在textboxes
上有一些控件(buttons
,COM objects
,form,
),我想在它们上面绘制,覆盖之前由它们绘制的任何像素。
我在Windows Forms
上使用C#
注意:Graphics
类在控件下绘制...
答案 0 :(得分:4)
看一下本文中的代码:
作者创建了一个组件(正如他所描述的那样)就像是在你的表单上的一块玻璃。然后,您的代码将使用此“玻璃”,控制,覆盖的形式等等。
一个影响你的严重限制是它不会绘制一些控件(包括TextBox)。这篇文章中描述了这些限制(以及它们的原因),但文章中的代码可能就是您正在寻找的内容(或者可以作为您自己的解决方案的起点)。
答案 1 :(得分:0)
我知道我在游戏中为时已晚,接受的答案没有任何问题,但我发现它太复杂且难以理解,所以我想出了一个“黑客”。< /p>
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.创建一个与 TransparentPanel
大小完全相同的 Form
,覆盖当前位于 Form
上的每个控件,将其置于最前面,并将其 BackColor
设置为 {{1} }, Transparent
到 Enable
。
3.现在,您在 false
内绘制的所有内容都将绘制在任何控件的“上方”,并且不会“阻止”任何可交互的控件,例如 OnPaint
。