时间:2010-07-24 06:09:35

标签: c# winforms

5 个答案:

答案 0 :(得分:7)

答案 1 :(得分:2)

答案 2 :(得分:2)

答案 3 :(得分:2)

我知道这是一个老线程,但我偶然发现了另一种简单的解决方案。

创建一个继承自Label的新透明标签控件:

class TransparentLabel : Label    {
    public TransparentLabel()
    {
        this.SetStyle(ControlStyles.Opaque, true);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams parms = base.CreateParams;
            parms.ExStyle |= 0x20;  // Turn on WS_EX_TRANSPARENT
            return parms;
        }
    }
}

(我没有声称发明了这个课程,它来自其他地方,可能是Hans Passant :-))

在您的设计器中,创建一个TransparentLabel并为其命名,例如tLabel1。设置属性如下:

  • AutoSize - 错误,以便您可以将其展开以涵盖所有控件 你想要禁用(当然可能是整个形式)。
  • Text - 空白。
  • Visible - 假(如果你想在中看到它,则保持为真 设计师,在这种情况下,将它移动到Z订单的后面,这样你就可以 还可以看到表单运行时它将覆盖的控件。

在表单中,当您要禁用控件时执行以下代码:

tLabel1.Visible = true;
tLabel1.BringToFront(); // if your designer has it at the back

这是有效的,因为当它可见时,TransparentLabel会获得所有鼠标点击和按键而不是基础控件,但它是透明的,因此您仍然可以看到底层控件。鼠标右键单击不执行任何操作,因为标签没有上下文菜单。

要重新启用控件,只需再次将Visible属性设置为false,一切都会恢复生机。

答案 4 :(得分:1)