Powershell Userform nicht über den Bildschirmrand hinaus verschiebbar machen
Guten Morgen zusammen,
ich habe mir eine Userform erstellt in welchem ein Timer läuft.
Klappt auch alles gut.
Die einzige Falle über die ich stolpere ist das das User form nicht über den Bildschirmrand hinaus verschiebbar sein darf.
hat einer von Euch vielleicht ne Idee wie ich das lösen kann so das es direkt im Skript mit drin steht.
Ein Beispiel würde mir reichen.
Viele Grüße und Danke schonmal.
gfritz74
ich habe mir eine Userform erstellt in welchem ein Timer läuft.
Klappt auch alles gut.
Die einzige Falle über die ich stolpere ist das das User form nicht über den Bildschirmrand hinaus verschiebbar sein darf.
hat einer von Euch vielleicht ne Idee wie ich das lösen kann so das es direkt im Skript mit drin steht.
Ein Beispiel würde mir reichen.
Viele Grüße und Danke schonmal.
gfritz74
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1241999776
Url: https://administrator.de/contentid/1241999776
Ausgedruckt am: 25.11.2024 um 16:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
ich vermute auch mal, dass es nicht mit Standardmitteln möglich ist.
Was aber wohl möglih wäre:
Prüfe die Position und größe des Fensters.
In der GUI dann nach folgender Logik vorgehen
oder so ähnlich
Gruß
em-pie
ich vermute auch mal, dass es nicht mit Standardmitteln möglich ist.
Was aber wohl möglih wäre:
Prüfe die Position und größe des Fensters.
In der GUI dann nach folgender Logik vorgehen
Wenn Startposition + Breite der GUI > DisplayResolution.Breite
Start.X = Displayresolution - Breite der GUI
Wenn Startposition + Höhe der GUI > DisplayResolution.Höhe
Start.Y = Displayresolution - Höhe der GUI
oder so ähnlich
Gruß
em-pie
Servus,
einfaches Beispiel
Grüße Uwe
einfaches Beispiel
Add-Type -A System.Windows.Forms
$global:screen = $null
$form = New-Object System.Windows.Forms.Form -Property @{
Size = '500,500'
Location = '100,100'
StartPosition = 'Manual'
Text = "Demo"
}
$form.add_Shown({
$global:screen = [System.Windows.Forms.Screen]::FromControl($form)
})
$form.add_LocationChanged({
if ($this.Location.X -lt $global:screen.WorkingArea.X){$this.Left = $global:screen.WorkingArea.X}
if ($this.Location.Y -lt $global:screen.WorkingArea.Y){$this.Top = $global:screen.WorkingArea.X}
if (($this.Location.X + $this.Width) -gt $global:screen.WorkingArea.Width){
$this.Left = $global:screen.WorkingArea.Width - $this.Width
}
if (($this.Location.Y + $this.Height) -gt $global:screen.WorkingArea.Height){
$this.Top = $global:screen.WorkingArea.Height - $this.Height
}
})
[void]$form.ShowDialog()
Moin,
Gruß Thomas
Zitat von @gfritz74:
Die einzige Falle über die ich stolpere ist das das User form nicht über den Bildschirmrand hinaus verschiebbar sein darf.
über die Events ließe sich das Ganze schon regeln - allerdings kannst du das Fenster dann auch nicht mehr auf einen anderen Monitor schieben, falls mehrere Monitore angeschlossen sindDie einzige Falle über die ich stolpere ist das das User form nicht über den Bildschirmrand hinaus verschiebbar sein darf.
Add-Type -a System.Windows.Forms
# Bildschirmgröße ermitteln
$Screen = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea | Select Width,Height
# Fenster erstellen
$Form = New-Object Windows.Forms.Form -Property @{
MaximumSize = $Screen
}
# Position auf Bildschirm begrenzen
$Form.Add_LocationChanged({
switch ($this.Location) {
{$_.X -lt 0} { $this.Left = 0 }
{$_.Y -lt 0} { $this.Top = 0 }
{($_.X+$this.Size.Width) -gt $Screen.Width} { $this.Left = $Screen.Width - $this.Size.Width }
{($_.Y+$this.Size.Height) -gt $Screen.Height} { $this.Top = $Screen.Height-$this.Size.Height }
}
})
Gruß Thomas