Я знаю, что это старая ветка, но случайно обнаружил альтернативное простое решение.
Создание нового прозрачного элемента управления меткой, который наследуется от метки:
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;
}
}
}
(Я не утверждаю, что изобрел этот класс, он пришел откуда-то еще, вероятно, Ганс Пассант :-))
В вашем дизайнере создайте TransparentLabel и дайте ему имя, скажем tLabel1
. Установите свойства следующим образом:
AutoSize
- Ложь, так что вы можете расширить ее, чтобы охватить все элементы управления
Вы хотите отключить (это может быть целая форма, конечно).
Text
- пусто.
Visible
- Ложь (или оставьте это истинным, если вы хотите увидеть это в
конструктор, в этом случае переместите его в конец Z-порядка, чтобы вы могли
также посмотрите элементы управления, которые будут закрыты при запуске формы).
В форме выполните этот бит кода, если вы хотите отключить элементы управления:
tLabel1.Visible = true;
tLabel1.BringToFront(); // if your designer has it at the back
Это работает, потому что когда он виден, TransparentLabel получает все щелчки мыши и нажатия клавиш, а не базовый элемент управления, но он прозрачен, поэтому вы все еще видите базовые элементы управления. Щелчок правой кнопкой мыши ничего не делает, потому что у ярлыков нет контекстного меню.
Чтобы снова включить элементы управления, просто снова установите для свойства Visible значение false, и все вернется к жизни.