Подтвердить что ты не робот

Прозрачный фон на 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:

изображение удалено, поскольку проблема решена.

4b9b3361

Ответ 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: