1

在网上搜索了一段时间,但没有找到我要找的东西。
也许有人可以帮助我。这是核心代码: http: //pastebin.com/qWEFrAuC

4

3 回答 3

2

您可以循环浏览屏幕以在其边界内查找鼠标位置。

此示例将窗体居中放置在鼠标当前所在的屏幕上,如果您想在窗口移动期间保持位置,则需要您稍加努力。

要确定屏幕:

Dim scr As Screen =
    Screen.AllScreens.Where(Function(x) x.Bounds.Contains(Control.MousePosition)).Single

要将表单在屏幕上居中:

CenterToScreen(Me, scr)

Public Shared Function CenterToScreen(ByVal f As Form, ByVal display As Screen) As Point

    If (display Is Nothing) Then
        display = Screen.PrimaryScreen
    End If

    Dim location As New Point With
        {
            .X = ((display.Bounds.Width - f.Bounds.Size.Width) \ 2),
            .Y = ((display.Bounds.Height - f.Bounds.Size.Height) \ 2)
        }

    f.Location = location

    Return location ' Return the new coordinates of the source Form.

End Function

注意:该函数是我的免费 API 的一部分:ElektroKit,您可以在其中获得更多有用的片段,例如与 Class 上的窗口定位相关的片段:

在此处输入图像描述

于 2016-03-20T03:44:40.267 回答
0

这会将您的表单放在鼠标指针所在的屏幕中央。

Private Sub CenterToCurrentScreen()
    Dim CurrentScreen As Screen = Screen.FromPoint(Cursor.Position)
    Me.Location = New Point( _
                           (CurrentScreen.Bounds.Width / 2) - (Me.Width / 2), _
                           (CurrentScreen.Bounds.Height / 2) - (Me.Height / 2))
End Sub

例如:CenterToCurrentScreen()当鼠标指针位于Screen 3上时调用会将您的表单置于Screen 3的中心。

Screen.FromPoint()将为您提供指定坐标的屏幕,并Cursor.Position为您提供鼠标指针的坐标。

于 2016-03-19T21:01:57.070 回答
0

更新!x2 - 图片框应随窗口形式移动。

据我所知,如果鼠标离开表单,它将变为对面的屏幕监视器(它对我有用,虽然我只有 2 个监视器)您拥有的监视器数量可能超过 2 个,但让我知道你怎么走。

    Private Sub Form1_MouseLeave(sender As Object, e As EventArgs) Handles Me.MouseLeave
    If Me.DesktopLocation = Screen.AllScreens(1).Bounds.Location Then
        Me.DesktopLocation = Screen.AllScreens(0).Bounds.Location + New Point(100, 100)
        PictureBox1.Location = New Point(Screen.AllScreens(0).Bounds.Location + New Point(100, 100))
    Else
        Me.DesktopLocation = Screen.AllScreens(1).Bounds.Location
    End If
End Sub
于 2016-03-19T20:34:09.757 回答