Как я могу установить форму, чтобы иметь прозрачный фон - PullRequest
6 голосов
/ 06 февраля 2009

Я изо всех сил пытаюсь заставить мою форму иметь прозрачный фон в vb.net

В настоящее время в форме New я установил

Me.SetStyle(ControlStyles.SupportsTransparentBackColor, true) 

Но форма по-прежнему имеет серый фон по умолчанию

Может кто-нибудь помочь ??

РЕДАКТИРОВАТЬ: мне нужно, чтобы элементы управления в форме были видны, поэтому я не думаю, что установка непрозрачности на 0 будет работать

РЕДАКТИРОВАТЬ: Я пробовал решение ключа прозрачности, но оно не работает. У меня есть круглое изображение с черным фоном. OnPaint Я установил ключ прозрачности для img pixel равным 0,0, после чего я получаю круглое изображение (что мне нужно). Он скрывает черный фон, но у меня все еще остается серый прямоугольник по умолчанию формы.

ниже код у меня есть -

Public Sub New()

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    Me.BackColor = Color.Transparent
    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    Me.Timer1.Start()
End Sub

Private Sub frmWoll_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap)

    img.MakeTransparent(img.GetPixel(2, 2))
    Me.TransparencyKey = img.GetPixel(2, 2)
End Sub

Ответы [ 4 ]

12 голосов
/ 06 февраля 2009

Используйте TransparencyKey для прозрачной формы.

например.

TransparencyKey = Color.Red
Button1.BackColor = Color.Red

Теперь запустите форму, и вы увидите, что у button1 есть отверстие.

Таким образом, используя этот метод, вы можете создать изображение маски в краске, для которой часть должна быть прозрачной, и применить это изображение к форме, и вуаля форма теперь прозрачна.

Edit: Извините за поздний ответ.

Ниже приведен ваш код, измененный в соответствии с вашими требованиями

Public Sub New()

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    Me.BackColor = Color.Transparent

    ' This call is required by the Windows Form Designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap)

    'img.MakeTransparent(img.GetPixel(2, 2))
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    Me.TransparencyKey = img.GetPixel(2, 2)
End Sub
2 голосов
/ 25 марта 2013

Установить свойство цвета TransparencyKey формы так же, как свойство цвета фона формы

1 голос
/ 07 февраля 2009

Есть несколько методов, которые вы можете использовать.

  • Используйте формы TransparencyKey
  • Переопределить OnPaintBackground (WM_ERASEBKGND)
  • Переопределить WndProc и обработать сообщения рисования (WM_NCPAINT, WM_PAINT и т. Д.)

Я рекомендую переопределить оконную процедуру для получения оптимальных результатов.

0 голосов
/ 06 февраля 2009
Me.Opacity = 0

Имейте в виду, что:

  1. Это для всей формы, а не только для фона. Есть обходные пути, чтобы сделать некоторые детали более непрозрачными.
  2. Это только псевдо-прозрачность, когда она делает снимок того, что за этим стоит. Он достаточно умен, чтобы знать, когда вы перемещаете форму, но не когда вы перемещаете другие прозрачные объекты поверх формы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...