Laden...

Windows Forms: Fenster darf nicht verschoben werden! (Nicht FormBorderStyle = None!)

Erstellt von SeCuRiiTaS vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.555 Views
S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren
Windows Forms: Fenster darf nicht verschoben werden! (Nicht FormBorderStyle = None!)

Hallo zusammen,
ich möchte verhindern, dass meine Windows Forms Anwendung vom Anwender verschoben werden kann.

Das soll aber nicht mit "FormBorderStyle = FormBorderStyle.None" erledigt werden, denn dann sieht mein Fenster nicht mehr wie ein Fenster aus.

Mittels den Koordinaten kann ich auch nicht vorgehen und die einfach wieder zurück setzen, denn meine Anwendung dockt sich neben einem externen Programm. Das heißt, dann ich mein externes Programm verschiebe, muss bzw. darf sich meine Anwendung verschieben.

Ich kann meine Anwendung also nur dann verschieben, wenn ich meine externe Anwendung, an der meine Anwendung angedockt ist, verschiebe.

Möchte nicht auf den Style des "FormBorderStyle" verzichten. Der soll auf "Fixed3D" stehen bleiben.

Jemand eine Idee?
Vielen Dank

//Edit: Noch zur Info: Ich hab bereits einen Ticker, der die Koordinaten ausliest und wenn der Anwender meint, die Anwendung verschieben zu müssen, wird diese binnen von maximal 750ms wieder auf die korrekte Poisition gestellt.

Sieht eben nur doof aus, wenn er virtuell verschieben kann und es so flackert weil meine Anwendung wieder zurück möchte. Mit "formborderstyle" auf "none" wäre das super, da der Anwender keine Möglichkeit mehr besitzt aber dann sieht meine Anwendung nicht mehr wie ein Fenster aus.

Mit freundlichen Grüßen,
SeCuRiiTaS

U
189 Beiträge seit 2011
vor 11 Jahren

Hallo,
das mit dem Timer ist nicht so eine gute Idee.
Benutze lieber Events, bspw. das Move, oder Loaction Changed-Event der Form.
Dann einfach die Position zurücksetzen oder wenn möglich das Event mittels
e.Cancel = true abbrechen.

B
357 Beiträge seit 2010
vor 11 Jahren

Merk dir die Position der Anwendung und behandle das Move-Event in welchem du die Koordinaten wieder setzt. Ich weiß zwar nicht, was du genau vorhast, aber ich persönlich bin wahnsinnig genervt, wenn sich eine Anwendung nicht verschieben lässt (2. Bildschirm) oder ich überhaupt in dieser Richtung bevormundet werde als Anwender.

S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren

Das mit dem Move Ereignis kann ich nicht machen, da sich meine Anwendung von meinem externen Programm so gesehen verschieben lässt, da es sich an diese externen Koordinaten orientiert.

Wenn ich nun die Location jedesmal zurücksetze, spinnt das Programm rum, da es zwei Werte erhält.

Den Timer muss ich benutzen, da ich die Koordinaten eines externen programms (=Prozesses) abrufen muss. Da komm ich via Events nicht dran.

Verschieben ist ja kein Problem. Einfach die Hauptanwendung (=Externes Programm) verschieben und meine entwickelte Anwendung bewegt sich mit. Ich möchte aber verhindern, dass der Anwender die entwickelte Anwendung woanders hin bewegt. Das klappt ja auch soweit, da die Koordinaten sofort wieder gesetzt werden.

Es flackert eben weil der Anwender 750ms lang (=Timer) bewegen kann. Musste ihn aus Performance Gründen auf 750ms stellen, daher kann ich auch nicht das Argument 1ms annehmen.

Mit freundlichen Grüßen,
SeCuRiiTaS

S
269 Beiträge seit 2010
vor 11 Jahren

Das mit dem Move Ereignis kann ich nicht machen, da sich meine Anwendung von meinem externen Programm so gesehen verschieben lässt, da es sich an diese externen Koordinaten orientiert.

Was aber auch kein Hindernis darstellen sollte:
Du kannst, wenn du dein eigenes Fenster verschieben willst, die Move(/LocationChanged)-Events vorrübergehend deregistrieren oder du nutzt eine Flag die angibt, dass das Fenster jetzt programmatisch verschoben wird und prüfst innerhalb der EventHandler auf dieses Flag.

//EDIT
Wusst ichs doch, dafür gibts sogar ne FAQ: [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung

S
SeCuRiiTaS Themenstarter:in
108 Beiträge seit 2012
vor 11 Jahren

Hallo Karill Endusa,
ich habe es nun mit dieser FAQ und der Booleaschen Variablen gelöst.

Klappt wunderbar. Vielen Dank dafür.

Mit freundlichen Grüßen,
SeCuRiiTaS