Drwaline zeichnen dauert viel zu lange!!

Topia

Mitglied
Hallo, habe ein ungewöhnliches Problem habe mit Hilfe von System.Drawing.Graphics eine linie gezeichnet klappt auch alles nur dauert es zeimlich lange bis die linie gezeichnet wird aber wenn ich den cursor auf ein anderes steuerelement lege bzw berühre kommt die linie sofort. Was kann das sein?

Dazu muss ich sagen ich verwende ein panel als roten punkt und bewege ihn mit einem for anweisungsblock + array und verämndere so seine position durch einen click und später zeichnet er die linie das klappt auch aber wie gesagt es dauert viel zu lang.

Code:
   protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
  

            //Städte
            
            

            //Graphics erzeugen
            System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Red);
            System.Drawing.Graphics formGraphics;

            //auf objekt *Picturebox*
            formGraphics = pictureBox1.CreateGraphics();
            int x = panel1.Location.X;
            int y = panel1.Location.Y;
            Point germany = new Point(x,y);
            Point newyork = new Point(244,213);
            //linie zeichnen
            formGraphics.DrawLine(myPen, germany, newyork);
            
            

            //Resourcen wieder freigeben
            myPen.Dispose();
            formGraphics.Dispose();
        }


Mein zweites Problem ist wenn ich mit dem Cursor die Coordinaten an clicke auf der form um den Panel zu coordinieren dann kommt er nie genau darauf an wo ich hingelickt habe sondern immer etwas weiter weg.
 
Zuletzt bearbeitet:
Hi
Wie löst man das Problem?
nicht durch Thread-Pushing ;)
Hallo, habe ein ungewöhnliches Problem habe mit Hilfe von System.Drawing.Graphics eine linie gezeichnet klappt auch alles nur dauert es zeimlich lange bis die linie gezeichnet wird aber wenn ich den cursor auf ein anderes steuerelement lege bzw berühre kommt die linie sofort. Was kann das sein?

Dazu muss ich sagen ich verwende ein panel als roten punkt und bewege ihn mit einem for anweisungsblock + array und verämndere so seine position durch einen click und später zeichnet er die linie das klappt auch aber wie gesagt es dauert viel zu lang.
Was machst du sonst noch alles beim Anzeigen der Form?
(OnLoad-Event?)
Mein zweites Problem ist wenn ich mit dem Cursor die Coordinaten an clicke auf der form um den Panel zu coordinieren dann kommt er nie genau darauf an wo ich hingelickt habe sondern immer etwas weiter weg.
Wie lässt du dir die Koordinaten geben?
Ggf. hilft ja eine Umrechnung mit PointToClient bzw. PointToScreen (beide Control Class)
 
Hallo Topia,
Ich vermute mal,das Zeichnen der Linien dauert nicht lange, sondern es hat Dir die Linien erst angezeigt, als die Dialogoberfläche neu gezeichnet wurde.

Da du ja in einer Picturebox zeichnest, nimm mal das Paint-Ereignis der Picurebox:

PHP:
   private void pictureBox1_Paint(object sender, PaintEventArgs e)
		{
			if (e.Graphics != null)
				Zeichne(e.Graphics);
		}

		void Zeichne(Graphics gr)
		{
			System.Drawing.Pen myPen = new      System.Drawing.Pen(System.Drawing.Color.Red);
			int x = 10;
			int y = 10;
			Point germany = new Point(x, y);
			Point newyork = new Point(244, 213);

			//linie zeichnen
			gr.DrawLine(myPen, germany, newyork);

			//Resourcen wieder freigeben
			myPen.Dispose();
		}

Ist es das was du suchst?

Gruß Col.Blake
 
mich wunderts eher das er die Linie überhaupt angezeigt hat. :D

das Problem besteht nämlich hier
Code:
formGraphics = pictureBox1.CreateGraphics();
Da solltest du wie colblake schon sagte das Paint Ereignisse der Picturebox verwenden und das hauseigene Graphics Objekt aus PaintEventArgs

das zweite Problem lag hier
Code:
formGraphics.Dispose();
vor dem Disposen des Graphics Objekt hättest du Flush aufrufen müssen dann sollte er auch sofort alles anzeigen.

mit Flush wird sozusagen gesagt das er alle Grafikoperationen ausführen soll.
 

Neue Beiträge

Zurück