Сделать фон формы прозрачным

Как сделать фон прозрачным в форме? Возможно ли это в С#?

Заранее спасибо!


person The Mask    schedule 10.07.2011    source источник


Ответы (4)


Вы можете установить BackColor вашей формы на необычный цвет (скажем, Color.Magenta), а затем установить свойство TransparencyKey формы на тот же цвет. Затем установите FormBorderStyle на None.

Конечно, это просто быстрое и простое решение. Края элементов управления уродливы, вам приходится постоянно менять цвет фона новых элементов управления, которые вы добавляете (если они являются кнопками или чем-то в этом роде), и целый ряд других проблем.

Это действительно зависит от того, чего вы хотите достичь. Что это такое? Если вы хотите сделать что-то вроде виджета, есть гораздо лучшие способы. Если вам нужны закругленные углы или собственный фон, есть гораздо лучшие способы. Пожалуйста, предоставьте дополнительную информацию, если TransparencyKey не совсем то, что вы имели в виду.

person Ry-♦    schedule 10.07.2011

Поместите в конструктор формы следующее:

public Form1()
{
    this.TransparencyKey = Color.Turquoise;
    this.BackColor = Color.Turquoise;
}

Примечание. Этот метод не позволяет вам щелкать по форме.

person Brian Graham    schedule 10.07.2011
comment
или лучше: TransparencyKey = BackColor; - person SoyDuck; 06.07.2016
comment
или лучше: this.TransparencyKey = this.BackColor = Color.Turquoise; - person Drarig29; 28.12.2016
comment
Такой подход делает края некрасивыми. Особенно, когда у тебя есть тени. - person Shameel Mohamed; 08.02.2018

Обновление:

Как сделать свой элемент управления прозрачным фоном

Устарело: Как: Создайте прозрачные формы Windows:

Примечание. Поскольку прозрачные формы поддерживаются только в Windows 2000 или более поздних версиях, Windows Forms будут полностью непрозрачными при работе в более старых операционных системах, таких как Windows 98, независимо от значения, установленного для свойства Непрозрачность.

person Mitch Wheat    schedule 10.07.2011

Простое решение для получения прозрачного фона в winform — перезаписать метод OnPaintBackground следующим образом:

protected override void OnPaintBackground(PaintEventArgs e)
{
//empty implementation
}

(Обратите внимание, что base.OnpaintBackground(e) удален из функции)

person Alexander Cosman    schedule 21.07.2012
comment
Но это просто рисует полностью черный фон… - person Ry-♦; 10.04.2013
comment
Это не рисует полностью черный фон. Если вы переопределите этот метод и не вызовете метод базового класса, ничего не будет отображаться в качестве фона. Три человека (включая меня) проверили это, и у всех это работает. - person Alexander Cosman; 11.04.2013
comment
Это работает, однако любые элементы управления в форме, для которых в качестве BackColor задано значение Transparent, в конечном итоге имеют настроенный BackColor формы в качестве фона. Придется ли вам переопределять событие OnPaintBackground каждого элемента управления, которое вы хотите сделать прозрачным? - person Nick Shaw; 13.06.2014
comment
Это мне больше подходит, потому что использование этого не делает края круглых элементов управления уродливыми, а также при использовании ключа прозрачности испортится, если вы используете тени на элементах управления (по крайней мере, это то, что я заметил) - person Igor Meszaros; 16.06.2014