Entwickler-Ecke

WinForms - OnPaint Ereignis auf Panel


SSC streezer - Di 04.11.08 09:42
Titel: OnPaint Ereignis auf Panel
hallo zusammen,

ich bin gerade am Versuch eine kleine Applikation zu schreiben die es ermöglicht vom linken tree zum rechten tree XML files to drag and drop'en...

das funzt auch soweit schon.

wobei ich jetzt aber eure Hilfe brauche ist das Paint Ereignis auf dem Panel in der Mitte.

es soll beim loslassen des xmls auf den rechten tree eine linie zeichnen vom quell ort zum ziel ort. im anhang hab ich das mal mit Paint hingezeichnet - aber das tool soll dies ja selbst malen ;)

weiss da jemand was dazu?



gruss,
mike


Th69 - Di 04.11.08 10:42

Kurze Antwort: ja.

Gegenfrage: wo liegt jetzt dein konkretes Problem?


SSC streezer - Di 04.11.08 10:45

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Kurze Antwort: ja.

Gegenfrage: wo liegt jetzt dein konkretes Problem?


ich weiss nicht wie die linie zeichnen. ich hab bis jetzt das hier:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
private void splitContainer2_Panel1_Paint(object sender, PaintEventArgs e)
        {
            // Get the graphics object
            Graphics gfx = e.Graphics;

            // Create a new pen that we shall use for drawing the line
            Pen myPen = new Pen(Color.Red, 5);

            Point p1 = new Point();
            p1.Y = m_NodePositionLinks;

            Point p2 = new Point();
            p2.Y = m_NodePositionRechts;

            gfx.DrawLine(myPen, p1, p2);

            GraphicList.Add(gfx);
        }


dies ergibt nur eine vertikale linie... und nur immmer eine - wenn ich ein neuen drag n drop mache löscht es die alte linie. des wegen leg ich das ganze auch in einen array ab.

ich nehm an dass ich den inhalt des arrays nach jedem drop wieder in das panel lesen muss oder? but: wie mache ich das? im onchange ereignis des panels?


gruss,
mike


SSC streezer - Di 04.11.08 11:33

habs rausgekriegt - ich war falsch in der annahme dass es die X koordinaten nicht braucht...


Th69 - Di 04.11.08 12:19

Da ist aber noch einiges zu tun bei deinem Code:
- benutze für die grafischen Objekte (Pen, Brush etc.) immer "using(Pen p = new Pen(...))" damit automatisch ein Dispose ausgeführt wird
- in dem Array mußt du die Koordinaten speichern, nicht das grafische Objekt
- das Array mußt du außerhalb füllen (beim Drag&Drop)
- im Paint-Ereignis dann einfach alle Linien des Arrays zeichnen