Dauerhaftes Zeichnen mit der Klasse Graphics



  • Ich will einen Funktionsgraph mit Windows Forms zeichen:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace W0016LogistischeGleichung
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void cmdBerechnung_Click(object sender, EventArgs e)
            {
                Graphics z = CreateGraphics();
                z.Clear(BackColor);         //Löschen der vorherigen Zeichng.
                Pen stift;
                Point start, ende;
                Font f = new Font("Arial", 10);
                SolidBrush pinsel = new SolidBrush(Color.Black);
                try
                {
                    stift = new Pen(Color.Black, 1);
                    double x0 = Convert.ToDouble(txtx0.Text);
                    double r = Convert.ToDouble(txtr.Text);
                    //x-Achse:
                    z.DrawLine(stift, new Point(20, 250), new Point(550, 250));
                    //y-Achse:
                    z.DrawLine(stift, new Point(20, 250), new Point(20, 50));
                    //1,0 Marke:
                    z.DrawString("1,0", f, pinsel, 20, 40);
                    stift = new Pen(Color.LightGray);
                    z.DrawLine(stift, new Point(20, 50), new Point(550, 50));
                    stift = new Pen(Color.Red, 1);
                    start = new Point(20, (int)(250 - x0 * 200));
                    for (int i = 1; i < 50; i++)
                    {
                        x0 = r * (x0 - x0 * x0);
                        ende = new Point(20 + 10 * i, (int)(250 - x0 * 200));
                        z.DrawLine(stift, start, ende);
                        start = ende;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Fehler: " + ex.Message, "Fehler",
                        MessageBoxButtons.OK);
                }
            }
        }
    }
    

    Soweit so gut.
    Dummerweise wird die Zeichnung gelöscht, wenn man das Fenster der Anwendung auf dem Bildschirm außerhalb des Bildschirms verschiebt.
    In einem Buch wird für den Fall die Ereignismethode Paint vorgeschlagen.
    Wie kann ich die Methode Paint hier einarbeiten?
    Kann mir jemand helfen? Vielen Dank im Voraus!



  • Pack den Code einfach in den painteventhandler. Das Ereignis findest du im Designer von vs.



  • Windows zeichnet nicht dauerhaft in Fenster.
    Stattdessen wird ein Fenster (oder Teile davon), das verdeckt war und nun sichtbar wird, neu gezeichnet. Wann das sein wird, ist nicht vorhersehbar. Wann immer es dem OS einfällt, stupst es Deine OnPaint()-Methode an, und die muss in der Lage sein, alles neu zu zeichnen. Du musst also alle dafür notwendigen Daten jederzeit für die OnPaint() verfügbar halten.


Anmelden zum Antworten