Autor Beitrag
Florian Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20


C# (VS 2008)
BeitragVerfasst: Mo 31.05.10 17:36 
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:
ausblenden 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.
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 31.05.10 19:37 
Hallo Florian,

schau dir mal diesen Artikel zum Zeichnen unter WinForms an: www.mycsharp.de/wbb2...d.php?threadid=21782
Florian Wolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20


C# (VS 2008)
BeitragVerfasst: Di 01.06.10 13:33 
Danke,

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