我可以在表格上绘制,高于所有控件吗?

时间:2011-08-14 23:52:12

标签: c# windows forms graphics draw

我是否可以在form上绘制ABOVE所有控件? 我在textboxes上有一些控件(buttonsCOM objectsform,),我想在它们上面绘制,覆盖之前由它们绘制的任何像素。
我在Windows Forms上使用C# 注意:Graphics类在控件下绘制...

2 个答案:

答案 0 :(得分:4)

看一下本文中的代码:

Draw Over WinForms Controls

作者创建了一个组件(正如他所描述的那样)就像是在你的表单上的一块玻璃。然后,您的代码将使用此“玻璃”,控制,覆盖的形式等等。

一个影响你的严重限制是它不会绘制一些控件(包括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} }, TransparentEnable

3.现在,您在 false 内绘制的所有内容都将绘制在任何控件的“上方”,并且不会“阻止”任何可交互的控件,例如 OnPaint