Mittwoch, 30. Juni 2010

Mausposition ändern

Über die Klasse Cursor kann man in C# die Position des Cursors ändern. Die entsprechende Eigenschaft heißt Position, sie speichert die Position des Mauszeigers als Point.
Die Position ist global, also nicht nur relativ in der Anwendung, (0,0) beschreibt beispielsweise die obere linke Ecke des Bildschirms.
Hier die komplette Anweisung:

Cursor.Position = new Point(X, Y);

Kommentare:

  1. Danke!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    AntwortenLöschen
  2. Muss ich dann voher auch einen Aufruf machen wie z.B. using System; oder geht das einfach so?

    AntwortenLöschen
  3. Bei Windows Forms Programmen sind die benötigten Klassen standardmäßig eingebunden, das müsste also so (ohne using) funktionieren.

    Bei anderen Anwendungen (wie Konsolenanwendungen) ist aber die Klasse System.Windows.Forms nötig, denn in dieser ist Cursors enthalten, welcher wiederum das Feld Cursor enthält.

    AntwortenLöschen
  4. So habe es mal versucht (mit Visual Studio) und leider kann ich bei einer Windows.Forms Anwendung leider das Fenster nicht gebrauchen und als Konsolenanwendung kann ich leider kein using System.Windows.Forms rein schreiben, da er mir nur eine Fehlermeldung ausgibt...n was nun bitte um hilfe!!!

    PS: Ich bin noch ein ziehmlicher Anfänger und muss für den Unterricht in gut 3 Wochen einen Weihnachtsbaum als Konsolenanzeige mit den Masen von mindestens 1 halb mal die breite ds Fensters und 2 drittel der höhe darstellen. Eigendlich leicht nur wir müssen den Baum nach und nach darstellen (also erst das "Laub" dann der Stamm danach ein paar "Kugeln" (also kleine Kreise) im Baum und dann kleine Kerzen (durch z.B. Striche und Punkten drauf) darstellen und dafür muss ich halt den Cursor neu positionieren... falls es noch einen Weg gibt währe es toll wenn mir diesen auch jemand sagen kann.

    Schonmal Danke im Vorraus. :D

    AntwortenLöschen
  5. Hallo,
    kein Problem, das Interesse freut mich.

    Bei Konsolenanwendungen sind die benötigten Klassen wie System.Windows.Forms standardmäßig gar nicht im Projekt referenziert, das ist aber problemlos möglich.
    Wir brauchen System.Windows.Forms und System.Drawing, diese einfach über Projekt - Verweis hinzufügen - .Net hinzufügen.

    Nun kannst du obigen Code benutzen, entweder in dem du die Klassen mittels using einfügst (das ist ja eigentlich nur eine Kurzschreibweise um sich den langen Klassennamen zu sparen) oder über die vollständigen Namen:

    System.Windows.Forms.Cursor.Position = new System.Drawing.Point(0, 0);

    Dein eigentliches Problem verstehe ich aber nicht, du sollst mit einer Konsolenanwendung einen Baum zeichnen, also durch Striche, Punkte etc.? Wofür musst du da den Cursor bewegen?
    Überlege dir einfach ein geeignetes Muster und drucke dieses mit mehreren Console.WriteLine().

    AntwortenLöschen
  6. ok das werde ich versuchen aber mein problem, weswegen ich den cursor brauche ist, dass ich erst z.B. das laub also:
    /\
    / \
    machen soll und anschließend dadrin die kugeln in etwa so:
    /\
    /oo\
    darstellen soll und ich muss das ja nacheinander machen also muss ich den cursor auf die stelle setzten wo anschließend durch ein Console.WriteLine(""); die kugeln hin sollen.

    PS: sertzt System.Drawing.Point(0,0); den Cursor um oder "malt" der dann an dieser stelle nur einen punkt?

    PPS: Wenn das dein Blog ist muss ich mal erlich sagen TOP!!!

    AntwortenLöschen
    Antworten
    1. Hallo!

      Falls dein Problem noch immer besteht, ist hier die Lösung nach der du eigentlich gesucht hast:

      Console.SetCursorPosition(x, y);

      Hiermit kannst den Cursor der Console an eine gewisse Stelle setzten und später dort mit

      Console.Write("/");

      ein / schreiben.

      Also z.B.:

      Console.SetCursorPosition(10, 1);
      Console.Write("/\\");
      Console.SetCursorPosition(9, 2);
      Console.Write("/ \\");
      Console.SetCursorPosition(8, 3);
      Console.Write("/ \\");
      Console.SetCursorPosition(7, 4);
      Console.Write("/ \\");
      Console.SetCursorPosition(10, 2);
      Console.Write("OO");
      Console.SetCursorPosition(9, 3);
      Console.Write("OOOO");
      Console.SetCursorPosition(8, 4);
      Console.Write("OOOOOO");

      Übernehme keine Garantie für die Richtigkeit, habs nicht ausprobiert, sollte aber passen!

      Löschen
    2. Oh, hat leider mehrfache Abstände entfernt (ersetze die _ durch Abstände!)

      Console.SetCursorPosition(9, 2);
      Console.Write("/__\\");
      Console.SetCursorPosition(8, 3);
      Console.Write("/____\\");
      Console.SetCursorPosition(7, 4);
      Console.Write("/______\\");

      Löschen
  7. Hi,
    also System.Drawing.Point(0,0); malt einen Punkt an der Stelle (0,0). Das und die anderen Sachen (WriteLine() etc) haben nichts mit dem Cursor zu tun, dieser ist fürs Zeichnen gänzlich überflüssig!
    Ich denke außerdem du sollst eine Konsolenanwendung realisieren oder? Da gibt es auch kein System.Drawing, dieses ist nur für Windows Forms verfügbar.
    Um etwas in der Konsole zu "zeichnen" (wie deinen Weihnachtsbaum), musst du das Ergebnis schrittweise erstellen.
    Du musst dir also das fertige Bild vorher schon vorstellen und dann dieses zeilenweise aufschreiben, z.B. so:

    Console.WriteLine(" /\ ");
    Console.WriteLine(" / \ ");
    Console.WriteLine(" / oo \ ");

    Die Leerzeichen in den Strings werden hier von Blogspot gelöscht - diese musst du im Programmcode drinlassen damit es nicht verrutscht.

    Alles klar?

    Alles klar?

    AntwortenLöschen
  8. Das ist eine nette Idee... Danke :D

    AntwortenLöschen