【问题标题】:Semi-Transparent child form (or other semi-transparent layer) within a form表单内的半透明子表单(或其他半透明层)
【发布时间】:2012-01-22 01:20:03
【问题描述】:

当某些事件发生时,我试图在我的整个表单上绘制一个半透明层,在这个半透明层前面有一个提示(类似于启用 UAC 的 Windows Vista/7 中的效果)

起初我尝试使用自定义半透明面板,但这似乎根本不起作用。因此,我现在尝试使用表单上的 opacity 属性在表单中使用子表单。但是,当这个半透明的窗体被添加到主窗体的控件中并显示出来时,它就失去了它的透明度。

在半透明层实际上不是主窗体中的组件的那一刻,我有一个 hacky 工作,然后透明度工作,但显然这并不理想,可能会导致各种问题更进一步。

此外,为了进一步简化事情,我想要包含该表单的表单不能成为 Mdi Parent(如果这有帮助的话),因为它本身包含在多个表单的选项卡控件中。

基本上任何可以帮助我在表单的其余部分上获得一个半透明的“黑暗”层并在顶部显示提示的东西都是理想的,我不太关心它是如何实现的。

谢谢。

【问题讨论】:

  • 您将不得不接受非理想的解决方案。只有顶层窗口可以是半透明的。
  • 有没有办法创建一个半透明的叠加层?

标签: vb.net winforms transparency


【解决方案1】:

您可以创建一个具有半透明背景的无边框表单:

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

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多