Autor Beitrag
chrizstone
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 12.08.11 11:39 
Hi Leute, villeicht kann mir eienr von euch helfen! Und zwar zeichne ich mir in eine PictureBox eine Kurve die aus mehreren Punkten besteht über eine Länge von 1000000...Bei dieser Länge kommt es bei jedem Scrollen zu Rucklern und aussetzern...Es muss doch auch irendwie möglich sein beim scrollen immer nur den gerade sichtbaren teil der picturebox neu zu zeichen oder?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 12.08.11 12:15 
Hallo chrizstone,

wenn du kein Image anzeigen willst, sondern alles selber zeichnest, dann verwende besser ein Panel (anstatt der PictureBox) als Zeichenfläche.

Was meinst du mit 1000000? Zeichnest du etwa 1 Million verschiedene Linien?
Intern wird beim Scrollen schon das Clipping beachtet, d.h. nur die sichtbaren Bereiche gezeichnet.
Wenn es dir um die Aktualisierung nach Hinzufügen eines Punktes/Linie geht, dann kannst du dafür die Invalidate(Rectangle)-Methode benutzen, d.h. du übergibst nur das neu zu zeichnende Rechteck (anstatt daß bei Invalidate() alles neu gezeichnet wird).

Und wenn es wirklich so viele Punkte/Linien sind, dann wäre es besser du würdest intern alles in eine eigene Bitmap zeichnen und diese dann einfach im Paint-Ereignis mittels DrawImage() zeichnen.
chrizstone Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Fr 12.08.11 13:08 
Hi,

also mit einem Panel habe ich es schon versucht, aber da hat es noch mehr geruckelt deswegen die PictureBox! Also mit 1000000 meine ich z.B das eine Linie von Point(0,0) bis Point(0,1000000) verläuft! Und diese Linie wird natürlich so wie es bei mir jetzt ist immer neu gezeichnet bei jedem scrollen!

Was genau meinst du mit Rectangle? Meine DrawMethode sieht bis jetzt so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
           
      
                e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                
                drawObj.Draw(e.Graphics);
                DrawC.Draw(e.Graphics);
                helpLines.DrawMiddle(e.Graphics);
                helpLines.DrawLeft(e.Graphics);
                helpLines.DrawRight(e.Graphics);
        
                
                e.Dispose();
                

      

    }
Dr. Hallo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Sa 13.08.11 00:49 
warum killst Du die EventArgs ?

ausblenden C#-Quelltext
1:
e.Dispose();					


Das brauchst du nicht tun, denn das übernimmt der Framework selbstständig.
Damit kannst du u.U. (m.A.n.) die ganze Anwendung zum Absturz bringen .
chrizstone Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 23.08.11 14:33 
Stimmt Dr. Hallo da hast du Recht...habe ich schon geändert! Aber dies löst ja auch nicht mein eigentliches Problem!