2016-03-19 12 views
1

Habe eine Weile im Internet gesucht, aber nicht gefunden, wonach ich gesucht habe.
Vielleicht kann mir jemand helfen. Hier ist der Kern-Code: http://pastebin.com/qWEFrAuCWie wird das Formular auf dem Bildschirm platziert, auf dem sich die Maus gerade befindet?

+0

Ich glaube, ich verstehe Ihre Frage, aber was ich würde gerne wissen, ob Sie das Formular auf dem gleichen Bildschirm wie der Cursor platzieren möchten _when das Formular shown_ ist oder wenn Sie es tun wollen _whenever Sie den Cursor there_ bewegen . –

+0

Das ist die Art und Weise, wie das Betriebssystem entscheidet, wo Sie Ihr erstes Fenster platzieren sollen. Klingt so, als ob Sie * ein anderes * Fenster erstellen möchten, wenn Sie bereits ein solches haben. Keine großartige Idee, wie sagt Ihnen der Benutzer, dass er es schaffen soll? –

+0

Ich möchte das Formular IMMER auf dem Bildschirm sein, auf dem der Cursor steht. –

Antwort

0

UPDATE! x2 - Picturebox sollte sich mit der Fensterform bewegen.

Von was ich wissen kann, wenn die Maus das Formular verlassen, wird es auf den gegenüberliegenden Bildschirm Monitor ändern (es tut für mich, obwohl ich nur 2 Monitore) die Menge der Monitore, die Sie haben könnte mehr als 2 sein aber lass mich wissen, wie du gehst.

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 
+0

Ich glaube, er möchte das Formular auf dem gleichen Bildschirm platzieren, wo der Mauszeiger ist. Wie wenn die Maus auf Bildschirm Nr. 3, dann legen Sie das Formular auf Bildschirm-Nr. 3. –

+0

möglicherweise hat er/sie nichts über mehrere Bildschirme erwähnt, ich denke, wir müssen warten und sehen, was sie sagen. – Werdna

+0

Warum sollte er sogar "auf dem Bildschirm" sagen, wenn er nicht mehrere hatte? :) –

0

Dies bringt Ihr Formular in die Mitte des Bildschirms, auf dem sich der Mauszeiger befindet.

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 

Zum Beispiel: Aufruf CenterToCurrentScreen(), wenn der Mauszeiger auf Screen 3 ist, wird das Formular im Zentrum von Screen 3 setzen.

Screen.FromPoint() geben Sie den Bildschirm an den angegebenen Koordinaten und Cursor.Position gibt Ihnen die Koordinaten des Mauszeigers.

+0

Yay, Upvote entfernt. Wer möchte erklären warum? –

1

Sie können die Bildschirme durchlaufen, um nach der Position der Maus in ihren Grenzen zu suchen.

In diesem Beispiel wird ein Formular in den Bildschirm zentriert, auf dem sich die Maus gerade befindet. Wenn Sie die Position während der Fensterbewegung beibehalten möchten, ist ein wenig Aufwand von Ihrer Seite erforderlich.

den Bildschirm zu bestimmen:

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

auf dem Bildschirm das Formular zum Zentrum:

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 

Hinweis: Die Funktion ist Teil der my free API: ElektroKit, wo man weitere nützliche Schnipsel wie bekommen könnte dass man zum Fenster Positionierung auf Klasse bezogen werden:

enter image description here

+0

Schöne Antwort, aber aus Neugier möchte ich wissen, warum Sie die Bildschirme durchlaufen, anstatt nur 'Screen.FromPoint()' aufzurufen? –

+0

@Visual Vincent Nur um eine andere Lösung als die veröffentlichte zu zeigen. Wenn ich das tue, könnte meine Antwort als "Kopie" betrachtet werden. – ElektroStudios

Verwandte Themen