Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Forms Awendung: Mauszeiger soll Form nicht verlassen können
Borbes
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

Forms Awendung: Mauszeiger soll Form nicht verlassen können

beantworten | zitieren | melden

Grüsse,

Ich arbeite gerade an einem Weltraum Shooter, daß ich in Windows Forms programmiere.
Da das Formfenster einen speziellen Bereich hat in dem sich das Raumschiff bewegen soll, möchte ich, dass dieses diesen Bereich nicht verlassen kann.

Der Code funktioniert an sich. Allerdings nicht sauber. An der Stelle habe ich den Events Mouse_Leave und Mouse_Move gearbeitet. Evtl hat ja jemand einen besseren Vorschlag.



private void Form1_MouseLeave(object sender, EventArgs e)
        {
            if (this.PointToClient(Cursor.Position).X ≤ 30)
            {               
          Cursor.Position = new Point(this.PointToClient(Cursor.Position).X + this.Width- 35, 
                this.PointToClient(Cursor.Position).Y + 130);
            }

private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            lock (_lock)
            {

                raumschiff.PosX = this.PointToClient(Cursor.Position).X;
                raumschiff.PosY = this.PointToClient(Cursor.Position).Y;
                raumschiff.HitboxRaum();
            }
        }


An sich wäre ich damit zufrieden. Wenn man den Mauszeiger versucht "leicht" aus dem Fenster zu schieben, springt er wieder zurück. Wenn es aber mit aller Gewalt probiere, springt er trotzdem raus. Also im Idealfall irgendwas, bei dem ich verhindern kann, dass er das Form verlässt.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Borbes am .
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.099

beantworten | zitieren | melden

Schalte doch einfach den Mauszeiger ab und handle die Koordinaten passend. Dann sieht man nicht mehr dass sie aus dem Fenster laufen.
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 241
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Vielleicht hilft dir die ClipCursor function weiter.

Grüße
spooky
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spook am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1.569
Herkunft: Düsseldorf

beantworten | zitieren | melden

Alternativ kannst Du auch "per Hand" die Maus-Position tracken und wenn sie das Fenster verlässt, immer wieder zur vorherigen Position im Fenster zurück setzen.

Bedenke aber:
Damit verursachst Du früher oder später Frustation beim Nutzer.
Wenn das aus anderen Gründen (z.B. weil der Nutzer eingesperrt sein soll) richtig ist, dann ist das aber egal :D


PS:
Im Prinzip also das gleiche wie die Funktion, die Spook genannt hat.
Stellt sich nur die Frage, wie sich das verhält, wenn das Fenster die Position (durch Tasten-Kombinationen) ändert oder wenn das Fenster minimiert wird.
Das müsstest Du also auch abfangen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Palladin007 am .
private Nachricht | Beiträge des Benutzers
Borbes
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Danke für die Antworten. Ich probier es gleich mal.
private Nachricht | Beiträge des Benutzers
Borbes
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Hab es getestet und es läuft. Zwar auch nicht 100%, aber besser als mein Code.

Wieder was dazu gelernt.
private Nachricht | Beiträge des Benutzers
Borbes
myCSharp.de - Member



Dabei seit:
Beiträge: 19

Themenstarter:

beantworten | zitieren | melden

Kurzes Update:


Die Cursor.Clip Funktion funktioniert besonders gut mit selbst erstellten Grenzen und etwas weniger gut wenn es sich tatsächlich um die Grenze der Form handelt.

Die Clip Eigenschaft verlangt nach einer Size. Ich habe dafür einfach ein globales Rectangle erstellt mit meinen gewünschten Maßen und hab das einfach mit übergeben.

Jetzt läuft es wie geschmiert.

Vielleicht bin ich doch nicht zu blöd zum programmieren :)
private Nachricht | Beiträge des Benutzers