Entwickler-Ecke

WinForms - Zeichnen in eine Picturebox bei Formularaufruf


Florian Wolf - Mo 31.05.10 17:36
Titel: Zeichnen in eine Picturebox bei Formularaufruf
Hallo,

ich habe auf meinem Formular eine picturebox in die ich ein paar Rechtecke Zeichnen muss.
Das funktioniert auch soweit. Nur wenn ich die Methode zum zeichnen der Rechtecke beim Aufrufen des Formulars aufrufe, dann sehe ich einmal kurz die Rechtecke und die verschwinden dann wieder. Wenn ich nachher manuell noch mal die Methode aufrufe sind die wieder da.
Wie kann es hinbekommen, dass ich gleich am Anfang die Rechtecke sehe.

Ich rufe das Formular wie folgt auf:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public void Execute(
    string strFensterbeschriftung,
    double dGroesseX,
    double dGroesseY)
        {
            //Fenster und ToolTip beschriften.
            this.Text = strFensterbeschriftung;
            toolTip1.ToolTipTitle = strFensterbeschriftung;

            dgGroesseX = dGroesseX;
            dgGroesseY = dGroesseY;

            this.Show();

            gHostForm.Enabled = false;

            RechteckeZeichnen();           

            
        }



So zeichne ich die Rechtecke. In der Listview stehen die Koordinaten der Rechtecke.

C#-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
private void RechteckeZeichnen()
        {
            double dUmrechnungX;
            double dUmrechnungY;
            int iAnzahl;
            int iIndex;
            double dX1;
            double dY1;
            double dBreite;
            double dHoehe;

            dUmrechnungX = pictureBox1.Width / dgGroesseX;
            dUmrechnungY = pictureBox1.Height / dgGroesseY;

            Graphics objG;

            Pen objPen = new Pen(Color.White);
            objPen.Width = 1;

            objG = pictureBox1.CreateGraphics();
            
            objG.FillRectangle(objPen.Brush, 00, pictureBox1.Width, pictureBox1.Height);

            iAnzahl = listView1.Items.Count;
            for (iIndex = 0; iIndex < iAnzahl; iIndex++)
            {
                if (listView1.Items[iIndex].SubItems[6].Text == "-1")
                {
                    objPen.Color = Color.Red;
                }
                else
                {
                    objPen.Color = Color.Green;
                }
                dX1 = Convert.ToDouble(listView1.Items[iIndex].SubItems[2].Text);
                dY1 = Convert.ToDouble(listView1.Items[iIndex].SubItems[3].Text);

                dBreite = Convert.ToDouble(listView1.Items[iIndex].SubItems[4].Text) - dX1;
                dHoehe = Convert.ToDouble(listView1.Items[iIndex].SubItems[5].Text) - dY1;

                dX1 *= dUmrechnungX;
                dY1 *= dUmrechnungY;
                dBreite *= dUmrechnungX;
                dHoehe *= dUmrechnungY;

                objG.FillRectangle(objPen.Brush, (int)dX1, (int)dY1, (int)dBreite, (int)dHoehe);
            }
            
            
            objPen.Dispose();
            objG.Dispose();
        }


danielf - Mo 31.05.10 17:43

Hallo,

entweder du schreibst direkt auf das Bild in der PictureBox oder du musst bei jedem Paint das Rechteck wieder neu zeichnen.

Gruß


Th69 - Mo 31.05.10 19:37

Hallo Florian,

schau dir mal diesen Artikel zum Zeichnen unter WinForms an: http://www.mycsharp.de/wbb2/thread.php?threadid=21782


Florian Wolf - Di 01.06.10 13:33

Danke,

der Artikel hat mir geholfen mein Problem zu lösen.