Прозрачный фон на winforms?
Я хотел сделать мои окна прозрачными, поэтому удалили границы, элементы управления и все, оставив только окно форм, а затем я попробовал сделать BackColor и TransparencyKey прозрачными, но это не сработало, поскольку BackColor не примет прозрачный цвет. После поиска я нашел это в msdn:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
this.TransparencyKey = BackColor;
Несчастливо это тоже не сработало. Я все еще получаю серый или любой другой выбранный цветной фон.
Все, что я хотел сделать, это прозрачность окон, поэтому я мог бы использовать фоновое изображение, которое будет действовать так, как если бы это была моя форма окна.
Я искал здесь и видел много тем в отношении непрозрачности, чего я не ищу, а также видел некоторых в отношении этого метода, который я пытался, но еще не нашел ответа.
Надеюсь, что кто-нибудь сможет осветить мой путь.
UPDATE:
изображение удалено, поскольку проблема решена.
Ответы
Ответ 1
Как я использовал ранее, нужно использовать дикий цвет (цвет, который никто в здравом уме не использовал) для BackColor, а затем установить для него ключ прозрачности.
this.BackColor = Color.LimeGreen;
this.TransparencyKey = Color.LimeGreen;
Ответ 2
Простым решением для получения прозрачного фона в форме окна является перезапись метода OnPaintBackground
следующим образом:
protected override void OnPaintBackground(PaintEventArgs e)
{
//empty implementation
}
(Обратите внимание, что base.OnpaintBackground(e)
удаляется из функции)
Ответ 3
Я пробовал решения выше (а также) многие другие решения из других сообщений.
В моем случае я сделал это со следующей настройкой:
public partial class WaitingDialog : Form
{
public WaitingDialog()
{
InitializeComponent();
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
// Other stuff
}
protected override void OnPaintBackground(PaintEventArgs e) { /* Ignore */ }
}
Как вы можете видеть, это сочетание ранее заданных ответов.
Ответ 4
Вот мое решение:
В конструкторах добавить эти две строки:
this.BackColor = Color.LimeGreen;
this.TransparencyKey = Color.LimeGreen;
В вашей форме добавьте этот метод:
protected override void OnPaintBackground(PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.LimeGreen, e.ClipRectangle);
}
Будь предупрежден, эта форма полностью прозрачна внутри рамки, но вы также можете щелкнуть ее. Тем не менее, было бы здорово нарисовать на нем изображение и сделать форму, которую можно было бы перетащить повсюду, чтобы создать форму в форме.
Ответ 5
Мое решение было очень близко к Джоэлю (не Эфирону, просто Джоулю):
public partial class WaitingDialog : Form
{
public WaitingDialog()
{
InitializeComponent();
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;
this.TransparencyKey = Color.Transparent; // I had to add this to get it to work.
// Other stuff
}
protected override void OnPaintBackground(PaintEventArgs e) { /* Ignore */ }
}
Ответ 6
Я нарисовал заставку (32bpp BGRA) с "прозрачным" цветом фона в VS2013 и поместил pictureBox в форму для отображения. Для меня работала комбинация из вышеперечисленных ответов:
public Form1()
{
InitializeComponent();
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = this.pictureBox1.BackColor;
this.TransparencyKey = this.pictureBox1.BackColor;
}
Поэтому убедитесь, что вы используете тот же BackColor всюду и устанавливаете этот цвет как TransparencyKey.
Ответ 7
Я попробовал почти все это. но все равно работать не мог.
Наконец, я обнаружил, что это связано с проблемами с 24 битами. Если вы попробовали некоторое растровое изображение, которое меньше 24 бит. Большинство из этих методов должны работать.
Ответ 8
Что для меня работает, это использование определенного цвета вместо реальной возможности .png представлять прозрачность.
Итак, что вы можете сделать, это взять фоновое изображение и нарисовать прозрачную область с определенным цветом (Magenta всегда казался мне подходящим...).
Задайте изображение как свойство Form BackgrounImage
и установите цвет как форму TransparencyKey
. Нет необходимости в изменениях стиля управления, и нет необходимости в BackColor.
Я попробовал это прямо сейчас, и это сработало для меня...
Ответ 9
Должно ли это иметь какое-либо отношение к "непрозрачности" формы/фона? Вы попробовали непрозрачность = 0
Также посмотрите, помогает ли эта статья CP: