Установить прозрачность label.backcolor - PullRequest
0 голосов
/ 15 апреля 2019

1) Прозрачная форма (set form.BackColor = TransparencyKey.Color), принадлежащая другому внешнему приложению с помощью API SetParent. Таким образом, я могу видеть внешнее окно, даже если моя форма прикреплена к нему.

2) На моей форме есть 100% непрозрачная метка с пользовательским задним цветом (под меткой я не вижу внешнего окна).

3) Я пытаюсь установить для label.BackColor полупрозрачное значение альфа-цвета, равное 255.

4) Если я уменьшу значение альфа-канала ... Я не вижу нижеприведенное внешнее окно ... НО МРАЗОВЫЙ ЦВЕТ МОЕЙ ФОРМЫ. При установке alfa на 0 label.backcolor становится 100% непрозрачным для моего 100% цвета формы.

Как избежать этой проблемы?

1 Ответ

0 голосов
/ 16 апреля 2019

Элемент управления .Net native Label не имеет свойства Opacity, поэтому вам необходимо:

  1. Создать собственный пользовательский элемент управления Label.
  2. Создатьсвойство непрозрачности внутри него.
  3. Переопределите метод OnPaintBackground этой новой пользовательской метки.

Вот один из созданных мной:

Public Class OpacityLabel
    Inherits Label

    Public Sub New()
        Me.DoubleBuffered = True
    End Sub

    Private _opacity As Integer = 255
    <System.ComponentModel.DefaultValue(255)>
    Public Property Opacity As Integer
        Get
            Return _opacity
        End Get
        Set(value As Integer)
            _opacity = Math.Max(Math.Min(value, 255), 0)
            Invalidate()
        End Set
    End Property

    Protected Overrides Sub OnPaintBackground(e As PaintEventArgs)
        ButtonRenderer.DrawParentBackground(e.Graphics, e.ClipRectangle, Me)
        Dim tColor As Color = Color.FromArgb(_opacity, Me.BackColor)
        If (tColor.A < 255 AndAlso tColor.A >= 0) Then
            Using solidBrush As Brush = New System.Drawing.SolidBrush(tColor)
                e.Graphics.FillRectangle(solidBrush, e.ClipRectangle)
            End Using
        Else
            Using solidBrush As Brush = New System.Drawing.SolidBrush(Me.BackColor)
                e.Graphics.FillRectangle(solidBrush, e.ClipRectangle)
            End Using
        End If
    End Sub
End Class
Создайте его. Создайте свой проект. Поместите его в свою форму. Измените BackColor на то, что вы хотите. Установите для свойства Opacity значение от 0 до 255.
...