vb.net - 使 vb.net 窗体的边框半透明

标签 vb.net transparent

有没有办法将一个 vb.net 表单嵌入到另一个 vb.net 表单中。我想做的是将Form-A设为半透明,将Form-B设为嵌入的主窗体。这样最终的应用程序周围就有一个半透明的边框。另外我不想使用 MDI 表单。

编辑:如何在不使用 MDI 表单的情况下使 vb.net 表单的边框半透明。

最佳答案

我稍微简化了代码,并将大多数事件连接到一个方法。不再有 Form-A,只有 Form-B。 Form-B 现在可以即时创建自己的 Form-A,无需实际创建代码文件。我将边框大小移动到一个变量,这样就可以很容易地调整它。

Imports System.Runtime.InteropServices

Public Class InnerForm
    Private borderSize As Integer = 10
    Private border As Form = New Form()

    Private Sub InnerForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        border.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        border.ShowInTaskbar = False
        border.BackColor = Color.Blue
        border.Opacity = 0.5
        border.Enabled = False

        RefreshBorder()
    End Sub

Private Sub DrawRectangle()
    Dim p As New Drawing2D.GraphicsPath()
    p.StartFigure()
    p.AddArc(New Rectangle(0, 0, 40, 40), 180, 90)
    p.AddLine(40, 0, border.Width - 40, 0)
    p.AddArc(New Rectangle(border.Width - 40, 0, 40, 40), -90, 90)
    p.AddLine(border.Width, 40, border.Width, border.Height - 40)
    p.AddArc(New Rectangle(border.Width - 40, border.Height - 40, 40, 40), 0, 90)
    p.AddLine(border.Width - 40, border.Height, 40, border.Height)
    p.AddArc(New Rectangle(0, border.Height - 40, 40, 40), 90, 90)
    p.CloseFigure()
    border.Region = New Region(p)
End Sub

Private Sub RefreshBorder()
    border.Show()
    border.Size = New Size(Me.Width + borderSize * 2, Me.Height + borderSize * 2)
    border.Location = New Point(Me.Location.X - borderSize, Me.Location.Y - borderSize)
    DrawRectangle()
    SetWindowPos(border.Handle, Me.Handle, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE)

    Me.BringToFront()
End Sub


    Private Sub frmMAin_Refresh(ByVal sender As Object, ByVal e As System.EventArgs) _
        Handles Me.GotFocus, Me.Move, Me.Activated, Me.SizeChanged, MyBase.Shown

        'dont show when maximized or minimized, else show it'
        If Me.WindowState = FormWindowState.Maximized Or Me.WindowState = FormWindowState.Minimized Then
            border.Hide()
        Else
            RefreshBorder()
        End If
    End Sub

    <DllImport("user32.dll")> _
    Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
    End Function

    Public Const SWP_NOSIZE As Int32 = &H1
    Public Const SWP_NOMOVE As Int32 = &H2
    Public Const SWP_NOACTIVATE As Int32 = &H10
End Class

请告诉我这是否适合您。

关于vb.net - 使 vb.net 窗体的边框半透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4632550/

相关文章:

c# - 如何将8bit声音转换为16bit

c# - Visual Studio 2012/VS11 是否有自定义语言加载项?

c# - 仅在 VB 中的 .NET 集合

javascript - 忽略图像中透明部分的鼠标交互并将其分配给下图

c# - MS 图表控件中的自定义 MarkerStyle

vb.net - 数据 GridView VB.net 2013,有多少行以及哪些在窗口中可见?

winapi - 透明的 win32 窗口和文本

linux下java swing透明度问题

java - 如何使我的自定义位图按钮字段使用透明背景?

Android:AppBarLayout渐变背景