看一下本文中的代码:
作者创建了一个组件(如他所描述的),就像您的窗体上的一块玻璃一样。然后,您的代码将在此“玻璃”上,控件上,其覆盖的窗体等上进行绘制。
一个会影响您的严重限制是它不会覆盖某些控件(包括TextBox)。本文中描述了这些限制(以及它们的原因),但是本文中的代码可能正是您要寻找的(或者可以用作您自己的解决方案的起点)。
我知道我在游戏中已经太晚了,并且接受的答案没有任何问题,但我发现它太复杂并且难以理解,所以我想出了一个“hack”。
Panel
1.使用以下代码进行自定义。
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
2.在 上当前的每个控件上创建一个TransparentPanel
与 完全相同大小的, ,将其置于最前面,并将其设置为,到。Form
Form
BackColor
Transparent
Enable
false
3. 现在,您在其中绘制的所有内容OnPaint
都将绘制在任何控件的“上方”,并且不会“阻止”任何可交互的控件,例如TextBox
。
归档时间: |
|
查看次数: |
8877 次 |
最近记录: |