Wie zeichne ich eine Linie mit der Maus in C #?

8

Dies ist mein Zeichnungscode, um eine benutzerdefinierte Linie mit der Maus auf ein Diagramm zu zeichnen. Kannst du mir bitte helfen, es richtig zu machen?

%Vor%

Problem ist, dass, wenn ich die Größe der Maske ändere, meine Zeile verschwindet. Es verschwindet, wenn onPaint-Ereignis ausgelöst wird.

    
Primoz 12.11.2010, 13:02
quelle

4 Antworten

7

Probieren Sie das aus ... Es ist eine Strichzeichnungsmethode, die sehr einfach und so nah wie möglich an Ihren eigenen Code implementiert wird. Stokes sind individuelle Sammlungen von Mausbewegungen. Jede Mausbewegung zwischen unten und oben wird als Strich aufgezeichnet, alle Striche werden gesammelt und dann neu gezeichnet, wenn das Paint-Ereignis ausgelöst wird. Dieses Beispiel ist einfach, könnte aber ein guter Ausgangspunkt sein.

Beachten Sie, dass Sie den Paint-Handler für Ihr Diagrammobjekt hinzufügen müssen.

%Vor%     
Paul Sasik 12.11.2010, 13:58
quelle
1

Haben Sie Probleme mit Ihrer aktuellen Implementierung? Funktioniert es oder möchten Sie den Code für eine bereits funktionierende Funktion verbessern?

Ich denke, deine Logik sieht gut aus. Ich würde dem Pen jedoch eine using-Klausel hinzufügen:

%Vor%

Auf diese Weise wird Ihr Stift auch dann entsorgt, wenn nach der Erstellung und dem Aufruf von Dispose Ausnahmen auftreten.

Sie können jedoch auch daran denken, dass Pen eine Klassenvariable ist, sodass Sie sie nicht jedes Mal erstellen und entsorgen müssen, wenn Sie die Maus bewegen.

    
Øyvind Bråthen 12.11.2010 13:06
quelle
1

Sie müssen Ihre Zeile irgendwo speichern.

Die Schritte, die Sie ergreifen müssen, sind:

  1. Erstellen Sie einen Speicherort für Ihre Punkte in der Hauptklasse, z. an ArrayList<ArrayList<Point>> - wobei jede ArrayList<Point> die Liste der Punkte in einer Zeile enthält.
  2. warte auf mousedown-Ereignisse und erstelle ein Array für eine neue Zeile (z. B. new ArrayList<Point> ) am Ende der Liste der Zeilen
  3. Warten Sie auf Mausbewegungen, und fügen Sie einen Punkt zur letzten Zeile in Ihrer Liste hinzu, wenn Sie die Maus ziehen. Bitten Sie darum, Ihr Fenster hier zu aktualisieren.
  4. in Ihrem paint , durchlaufen Sie alle Zeilen und zeichnen Sie jeden Punkt jeder Zeile im Array.
  5. Um die Zeichnung zu löschen, ersetzen Sie das Array einfach durch eine leere Liste und aktualisieren Sie das Fenster.

Wenn Sie Ihre Zeilen nicht irgendwo ablegen, sind sie verloren. Macht das Sinn?

Die andere Möglichkeit, Zeilen zu speichern, besteht darin, ein Canvas -Objekt zu verwenden, in dem die Pixel-Map des Gezeichneten gespeichert und automatisch gezeichnet wird. Wenn es Ihnen nichts ausmacht, Ihre Liniendaten nicht als Vektorpunkte zu haben und Sie vielleicht auch Bilder oder Farben verwenden möchten, dann ist dies vielleicht ein besserer Ansatz.

    
Sanjay Manohar 12.11.2010 13:27
quelle
0

Ich habe vor einiger Zeit eine Lösung gepostet wie man mit Mausbewegungen eine Linie zeichnet. Dies sollte für Sie arbeiten.

%Vor%

Grundsätzlich können Sie bei jeder Bewegung der Maus eine Linie zeichnen. Wenn es eine vorherige Zeile gab und Sie immer noch die Maus bewegen, löschen Sie die Zeile und zeichnen Sie die neue Zeile. Beachten Sie, dass dieses Beispiel basierend auf einem bestimmten Panel (in diesem Beispiel myPanel1) versetzt wird. Dementsprechend anpassen. Wenn Sie die Größe des Steuerelements ändern, müssen Sie die Linie mithilfe des vorherigen Punkts des Ankerpunkts neu zeichnen.

    
SwDevMan81 12.11.2010 13:05
quelle

Tags und Links