tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
333
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Topia Topia ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    48
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
       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.
    Geändert von Topia (09.10.08 um 00:45 Uhr)
     

  2. #2
    Topia Topia ist offline Mitglied Bronze
    Registriert seit
    Feb 2008
    Beiträge
    48
    Wie löst man das Problem?
     

  3. #3
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi
    Zitat Zitat von Topia Beitrag anzeigen
    Wie löst man das Problem?
    nicht durch Thread-Pushing
    Zitat Zitat von Topia Beitrag anzeigen
    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?)
    Zitat Zitat von Topia Beitrag anzeigen
    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)
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  4. #4
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    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-Code:
       private void pictureBox1_Paint(object senderPaintEventArgs 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(xy);
                
    Point newyork = new Point(244213);

                
    //linie zeichnen
                
    gr.DrawLine(myPengermanynewyork);

                
    //Resourcen wieder freigeben
                
    myPen.Dispose();
            } 
    Ist es das was du suchst?

    Gruß Col.Blake
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  5. #5
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    mich wunderts eher das er die Linie überhaupt angezeigt hat.

    das Problem besteht nämlich hier
    Code :
    1
    
    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 :
    1
    
    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.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. Vorschaurender dauert viel zu lange!
    Von tomengel im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 22.04.07, 20:32
  2. SELECT dauert zu lange
    Von Deletemaster im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 13.02.07, 21:02
  3. Sleep dauert zu lange
    Von TimSz im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 19.05.06, 20:52
  4. Datenbankausgabe dauert zu lange
    Von soa im Forum PHP
    Antworten: 3
    Letzter Beitrag: 21.09.05, 18:07
  5. VRAY dauert zu lange
    Von Visu1 im Forum 3D Studio Max
    Antworten: 5
    Letzter Beitrag: 19.07.04, 14:35