Прозрачные контрольные фоны в градиентной форме VB.NET? - PullRequest
1 голос
/ 04 февраля 2009

Я заполняю фон некоторых форм WinForms в VB.NET 2005 красивой градиентной заливкой (переопределяя событие OnPaint). Это работает нормально, но различные метки и т. Д. На форме отображаются на сплошном фоне, даже после того, как я установил для BackColor значение Color.Transparent. Настройка ключа прозрачности самой формы, кажется, влияет на это, но я не могу заставить надписи иметь действительно прозрачный BackColor, есть ли простой способ обойти это или я смотрю на пользовательские элементы управления и т. Д.

Ответы [ 2 ]

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

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

Public Class TransparentLabel
    Inherits Label

    Public Sub New()
        Me.SetStyle(ControlStyles.Opaque, True)
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, False)
    End Sub

    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H20  ' Turn on WS_EX_TRANSPARENT
            Return cp
        End Get
    End Property
End Class

Мерцание может быть заметным, не исправить.

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

После некоторых экспериментов я обнаружил, что для градиентного заполнения фонов форм и сохранения прозрачности надписей работает следующее:

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)

    Dim formGraphics As Graphics = e.Graphics
    Dim gradientBrush As New LinearGradientBrush(New Point(0, Height), New Point(0, 0), Me.AppSettings.FormGradiantFrom, Me.AppSettings.FormGradiantTo)

    formGraphics.FillRectangle(gradientBrush, ClientRectangle)

End Sub

И в событии загрузки формы:

SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.DoubleBuffer Or _
               ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...