Xmlform location changed

gfritz74
Goto Top
Guten Morgen zusammen,

ich habe mir mit wpf ein Userform gebaut.
Dieses darf aber nicht aus dem Bildschirm hinausgeschoben werden.
Mit nem normalen windows form funktioniert das auch.
Nur leider nicht mit diesem. Hier der Code.


Habe schon $TimerForm.RegionChanged in verschiedenen Varianen probiert. Keine Geht.
Vielleicht hat einer von Euch ne Idee?

Viele Grüße
gfritz74

Content-Key: 1338656663

Url: https://administrator.de/contentid/1338656663

Ausgedruckt am: 16.08.2022 um 12:08 Uhr

Mitglied: 149569
149569 03.10.2021 aktualisiert um 11:58:54 Uhr
Goto Top
Einfach den WindowStyle auf None ändern, schon ist Verschieben Geschichte...

btw. du verwendest da einige falsche Variablen wie $XMLForm die es gar nicht gibt ... deswegen funktioniert da auch nix.
$TimerForm.RegionChanged
Ebenso hier, erstens muss man Methoden mit add Prefix ansprechen udn zweitens ist das RegionChanged nicht das man bräuchte das wäre "LocationChanged".

Mitglied: gfritz74
gfritz74 03.10.2021 aktualisiert um 11:59:45 Uhr
Goto Top
Zitat von @149569:

Einfach den WindowStyle auf None ändern, schon ist Verschieben geschichte...

btw. du verwendest da einige falsche Variablen die es gar nicht gibt ...

Schön das Du antwortest. Danke
Es soll ja verschiebbar sein, aber nicht aus dem Bildschirm hinaus.
Es werden noch einige Problem auftauchen beim zusammenfügen mit den WPF Form.
Wäre Sehr nett wenn Du mir da helfen würdest.
Mitglied: 149569
149569 03.10.2021 aktualisiert um 12:41:09 Uhr
Goto Top
Es soll ja verschiebbar sein, aber nicht aus dem Bildschirm hinaus.
As simple as that.
Mitglied: gfritz74
gfritz74 03.10.2021 um 12:50:15 Uhr
Goto Top
Zitat von @149569:

Es soll ja verschiebbar sein, aber nicht aus dem Bildschirm hinaus.
As simple as that.

Vielen Dank. Left und Top funktioniert super.
Habe das angepasst für Buttom und Right.
Da gehts nicht.

Mitglied: 149569
149569 03.10.2021 aktualisiert um 13:03:25 Uhr
Goto Top
Zitat von @gfritz74:
Habe das angepasst für Buttom und Right.
Ist ja auch Blödsinn das brauchst du nicht! Die 4 Prüfungen machen das schon auch für das nach Rechts oder nach unten raus schieben, einfach mal zur Abwechslung das Oberstübchen einschalten face-smile.
Mitglied: gfritz74
gfritz74 03.10.2021 um 13:09:41 Uhr
Goto Top
Zitat von @149569:

Zitat von @gfritz74:
Habe das angepasst für Buttom und Right.
Ist ja auch Blödsinn das brauchst du nicht! Die 4 Prüfungen machen das schon auch für das nach Rechts oder nach unten raus schieben, einfach mal zur Abwechslung das Oberstübchen einschalten face-smile.

Sorry aber ich versteh nicht worauf Du hinauswillst.
Ich muss doch irgendwie angeben das der nach allen vier seiten nicht raus schiebbar sein soll.
Mitglied: 149569
149569 03.10.2021 aktualisiert um 13:26:36 Uhr
Goto Top
Zitat von @gfritz74:
Sorry aber ich versteh nicht worauf Du hinauswillst.
Ich muss doch irgendwie angeben das der nach allen vier seiten nicht raus schiebbar sein soll.
Das macht das schon, einfach mal die letzten beiden If-Abfragen lesen, dann wird dir klar das das mit diesen schon gemacht wird !!
Die Fenster-Position wird nur über die linke obere Ecke festgelegt, nicht über rechts oder unten!

if ($this.Top + $this.Height -gt $Screen.Height){$this.Top = $screen.Height - $this.Height}
Bedeutet was ? Genau: Wenn die TOP Position des Fensters + Höhe des Fensters selbst größer als die Höhe des Desktops ist dann lege die Position via TOP Eigenschaft auf TOP Position des Fensters + Höhe des Fensters fest, somit kann das Fenster aus Prinzip nie weiter nach unten aus dem Desktop geschoben werden ... genau das Gleiche eben nur für die Left Position hier
if ($this.Left + $this.Width -gt $Screen.Width){$this.Left = $screen.Width - $this.Width}
Nur das hier eben das Hinausschieben über den rechten Rand nicht mehr ermöglicht wird anstatt nach unten

Jetzt verstanden? Ist doch wirklich nicht so schwer ...
Mitglied: gfritz74
gfritz74 03.10.2021, aktualisiert am 21.04.2022 um 17:04:15 Uhr
Goto Top
Zitat von @149569:

Zitat von @gfritz74:
Sorry aber ich versteh nicht worauf Du hinauswillst.
Ich muss doch irgendwie angeben das der nach allen vier seiten nicht raus schiebbar sein soll.
Das macht das schon, einfach mal die letzten beiden If-Abfragen lesen, dann wird dir klar das das mit diesen schon gemacht wird !!!!!
Die Fenster-Position wird nur über die linke obere Ecke festgelegt, nicht über rechts oder unten!

if ($this.Top + $this.Height -gt $Screen.Height){$this.Top = $screen.Height - $this.Height}
Bedeutet was ? Genau: Wenn die TOP Position des Fensters + Höhe des Fensters selbst größer als die Höhe des Desktops ist dann lege die Position via TOP Eigenschaft auf TOP Position des Fensters + Höhe des Fensters fest, somit kann das Fenster aus Prinzip nie weiter nach unten aus dem Desktop geschoben werden ... genau das Gleiche eben nur für die Left Position hier
if ($this.Left + $this.Width -gt $Screen.Width){$this.Left = $screen.Width - $this.Width}
Nur das hier eben das Hinausschieben über den rechten Rand nicht mehr ermöglicht wird anstatt nach unten

Jetzt verstanden?

Verstanden schon. Zumindest wie sich das zusammensetzt.
Aber warum kann ich die Fenster dann trotzdem rechts und nach unten rauschhieben?

unten

rechts
Mitglied: 149569
149569 03.10.2021 aktualisiert um 13:32:27 Uhr
Goto Top
Dann hast du wohl einen "erweiterten Screen" der auf einen anderen Monitor erweitert wird, wenn deine Working Area größer ist das der einzelne Monitor. Klappt hier wie zu erwarten übrigens einwandfrei.
Mitglied: gfritz74
gfritz74 03.10.2021 um 13:47:04 Uhr
Goto Top
Zitat von @149569:

Dann hast du wohl einen "erweiterten Screen" der auf einen anderen Monitor erweitert wird, wenn deine Working Area größer ist das der einzelne Monitor. Klappt hier wie zu erwarten übrigens einwandfrei.

Ich habe nur einen Monitor dran. Was ich allerdings festgestellt habe das die Working Area tatsächlich größer ist.
Mitglied: gfritz74
gfritz74 03.10.2021 um 13:56:27 Uhr
Goto Top
Zitat von @gfritz74:

Zitat von @149569:

Dann hast du wohl einen "erweiterten Screen" der auf einen anderen Monitor erweitert wird, wenn deine Working Area größer ist das der einzelne Monitor. Klappt hier wie zu erwarten übrigens einwandfrei.

Ich habe nur einen Monitor dran. Was ich allerdings festgestellt habe das die Working Area tatsächlich größer ist.

Kann das an der Skalierung liegen?
Mitglied: 149569
149569 03.10.2021 aktualisiert um 14:34:20 Uhr
Goto Top
Zitat von @gfritz74:
Kann das an der Skalierung liegen?
Ja die musst du da als Faktor mit einbeziehen
Mitglied: gfritz74
gfritz74 03.10.2021 um 14:29:29 Uhr
Goto Top
Zitat von @149569:

Zitat von @gfritz74:
Kann das an der Skalierung liegen?
Ja die musst du da als Faktor mit einbeziehen

Problem gelöst.
Habe die $screen abfrage geändert in
$Screen = ([System.Windows.Forms.Screen]::AllScreens |? Primary).Bounds.Size
jetzt passt alles.

Würdest du mir noch bei einer anderen Sache helfen? Ich muss einen Reboot timer in das LabelTime einbauhen.
Code habe ich alles fertig. War aber für die Windows Form erstellt.
Wenn das läuft kriege ich den Rest alleine hin.
Mitglied: 149569
149569 03.10.2021 aktualisiert um 14:41:18 Uhr
Goto Top
>Habe die $screen abfrage geändert in
$Screen = ([System.Windows.Forms.Screen]::AllScreens |? Primary).Bounds.Size
Da ist dann zwar die Taskleiste mit inkludiert, aber naja ...
Zitat von @gfritz74:
Würdest du mir noch bei einer anderen Sache helfen? Ich muss einen Reboot timer in das LabelTime einbauhen.

Als Denkanstoß zum selbst machen:
Und zum nachschlagen/lernen
https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.timer?v ...

Methoden "Start()" zum Starten des Timers, "Stop()" zum stoppen, Property "Interval" zum setzen der Aktualisierungsrate und Event "Tick" welches im definierten Interval aufgerufen wird (Wie du Events abbonierst hast du hier ja schon gelernt, hoffentlich). Damit solltest du jetzt auch selbst klar kommen.

Und wie immer Thread schließen wenn das Thema im Ursprungsbeitrag abgeschlossen wurde!
Mitglied: gfritz74
Lösung gfritz74 03.10.2021 um 14:44:29 Uhr
Goto Top
Zitat von @149569:

>>Habe die $screen abfrage geändert in
$Screen = ([System.Windows.Forms.Screen]::AllScreens |? Primary).Bounds.Size
Da ist dann zwar die Taskleiste mit inkludiert, aber naja ...
Zitat von @gfritz74:
Würdest du mir noch bei einer anderen Sache helfen? Ich muss einen Reboot timer in das LabelTime einbauhen.

Als Denkanstoß zum selbst machen:
Und zum nachschlagen/lernen
https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.timer?v ...

Methoden "Start()" zum Starten des Timers, "Stop()" zum stoppen, Property "Interval" zum setzen der Aktualisierungsrate und Event "Tick" welches im definierten Interval aufgerufen wird (Wie du Events abbonierst hast du hier ja schon gelernt, hoffentlich). Damit solltest du jetzt auch selbst klar kommen.

Und wie immer Thread schließen wenn das Thema im Ursprungsbeitrag abgeschlossen wurde!

Ich habe den Code ja fertig. Aber der war ja für das Windows Form und nicht für WPF.
Ich mache einen neuen Beitrag auf. Wäre lieb wenn Du dir den mal anschaust.
Danke Dir für deine Hilfe.