C# Graphics - ich check es nicht



  • Hi,

    nachdem ich die Graphics Schnittstelle eigentlich schon halbwegs kapiert habe, verstehe ich einfach nicht, wie man es hinbekommt, dass das Fenster neugezeichnet wird, wenn es weggeklickt wurde. Ich hab jetzt schon ein anderes Programm angesehen, dass neuzeichnet, aber da sind die Funktionen so in Klassen geschachelt, dass ich auch nicht nachvollziehen kann, was jetzt der entscheidende Befehl ist.

    Ein Minimalbeispiel:

    Graphics gfx;
    Pen pen;
    
    private void picCont_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
    	gfx  =	picCont.CreateGraphics();
    	pen = new Pen(System.Drawing.Brushes.Blue, 1);
    	gfx.DrawLine(pen, new Point(1,1), new Point(10,10));
    	//picCont.Refresh(); <-- damit geht´s (flimmernd)
    }
    

    Das sollte einfach im Paint Ereignis neuzeichnen - es wird allerdings sofort wieder der Hintergrund drüber gelegt. Lass ich den Refresh-Befehl drin, habe ich Dauer-Flimmern (ist ja klar, er zeichnet immer neu) - aber man sieht diese kleine Linie die er zeichnen soll (wechselt sich sehr schnell mit der Hintergrundfarbe ab) gfx nicht neuanlegen (sondern nur einmal) macht keinen Unterschied

    Also eigentlich mach ich doch schon alles... nur C# überdeckt das gezeichnete gleich wieder mit der Hintergrundfarbe 😞

    Vielen Dank,
    Patrick



  • Typischer Amateurfehler 😉
    1. Nimm das Graphics Object aus den PaintEventArgs und erzeuge kein eigenes Graphics Object.
    2. Es macht meist wenig Sinn bei jedem Paint Ereignis ein neuen Pen auf dem Heap zu erzeugen, wenn es sowieso immer die gleiche Farbe ist -> Einmal im Konstruktor erzeugen und immer wieder benutzen.



  • aaaaahhh Danke! Naja das sind eben einfach die Implentierungsfeinheiten, mit MFC in C++ konnte ich zeichnen, auch wenn es da viel grauenvoller umgesetzt war.

    Pen erzeuge ich nicht immer neu, habe ich jetzt nur reingeschrieben, dass das Beispiel "minimal" ist, also mit einer Prozedur auskommt.


Anmelden zum Antworten