VB.net使用FormBorderStyle移动表单无

时间:2017-06-10 18:40:00

标签: vb.net

我想将FormBorderStyle设置为None的简单表单应用程序,但问题是我无法移动此表单,它只是..静态?我想做这样的事情: http://i.imgur.com/TlQCWJx.png

任何想法如何解决?

3 个答案:

答案 0 :(得分:1)

您可以使用这样的代码使表单可拖动:

Public Class Form1

    Private Const HTCLIENT As Integer = &H1
    Private Const HTCAPTION As Integer = &H2
    Private Const WM_NCHITTEST As Integer = &H84

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)

        If m.Msg = WM_NCHITTEST AndAlso m.Result = HTCLIENT Then
            m.Result = HTCAPTION
        End If
    End Sub

End Class

答案 1 :(得分:0)

你可以看看WPF。 它是WinForms的新版本,您可以更有可能设计对话框。

但它与WinForms也有很大的不同。你需要时间来找到WPF。

Microsoft Docs about WPF

答案 2 :(得分:0)

这是一个非常简单的移动无边框表单的例子,以帮助您入门:

在表单中添加一个面板,将其命名为pnlTopBorder并将其停靠在顶部。当您在面板上进行mousedown时,捕获鼠标位置。当您在面板上鼠标移动时,如果按下左按钮,则计算并设置新的表格位置。

Public Class Form1

    Private newpoint As System.Drawing.Point
    Private xpos1 As Integer
    Private ypos1 As Integer

    Private Sub pnlTopBorder_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles pnlTopBorder.MouseDown
        xpos1 = Control.MousePosition.X - Me.Location.X
        ypos1 = Control.MousePosition.Y - Me.Location.Y
    End Sub

    Private Sub pnlTopBorder_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles pnlTopBorder.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            newpoint = Control.MousePosition
            newpoint.X -= (xpos1)
            newpoint.Y -= (ypos1)
            Me.Location = newpoint
        End If
    End Sub

End Class

如果你想要窗口标题和表单控件,你必须在Paint事件中绘制它们并处理所有事件以使它们起作用。这一切都可行,但它更复杂。