Полупрозрачная дочерняя форма (или другой полупрозрачный слой) внутри формы - PullRequest
0 голосов
/ 16 декабря 2011

Я пытаюсь нарисовать полупрозрачный слой поверх всей моей формы, когда происходят определенные события, с подсказкой перед этим полупрозрачным слоем (аналогично эффекту в Windows Vista / 7 с включенным UAC)

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

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

Кроме того, для дальнейшего упрощения вещей форму, которую я хочу содержать в форме, нельзя превратить в Mdi Parent (если это вообще поможет), поскольку она сама содержится в элементе управления несколькими формами с вкладками.

В принципе, все, что могло бы помочь мне получить полупрозрачный «затемненный» слой поверх остальной части моей формы с подсказкой вверху, было бы идеальным, я не слишком обеспокоен тем, как это достигается.

Спасибо.

1 Ответ

0 голосов
/ 16 декабря 2011

Вы можете создать форму без полей с полупрозрачным фоном:

Private Sub button1_Click(sender As Object, e As EventArgs)
    Dim f As New Form2()
    f.WindowState = FormWindowState.Normal
    f.StartPosition = FormStartPosition.Manual
    f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
    f.TransparencyKey = Color.Magenta
    f.Bounds = Me.Bounds
    f.ShowDialog()
End Sub

В событии рисования Form2 вы можете установить его полупрозрачным с помощью штриховой кисти:

Private Sub Form2_Paint(sender As Object, e As PaintEventArgs)
    Dim hb = New HatchBrush(HatchStyle.Percent50, Me.TransparencyKey)
    e.Graphics.FillRectangle(hb, Me.DisplayRectangle)
End Sub
...