Autor Beitrag
TheLol
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 05.08.08 15:56 
Erstmal der Code, zu besseren Verständnis:
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:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // Form1 ist ein stink normales Fenster mit der clientsize 500x500
        }
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            //Rechteck zeichnen (im Raster)
            if (e.Button == MouseButtons.Left)
            {
                int iXZaehler = 0;
                int iYZaehler = 0;
                int iXBild = 0;
                int iYBild = 0;
                for (int j = 0; j <= 10; j++)
                {
                    iXZaehler = iXZaehler + 50;
                    if (e.X <= iXZaehler)
                    {
                        iXBild = iXZaehler - 50;
                        break;
                    }
                }
                for (int j2 = 0; j2 <= 10; j2++)
                {
                    iYZaehler = iYZaehler + 50;
                    if (e.Y <= iYZaehler)
                    {
                        iYBild = iYZaehler - 50;
                        break;
                    }
                }
                Graphics gRechteck = this.CreateGraphics();
                gRechteck.FillRectangle(Brushes.Red, iXBild + 1, iYBild + 14949); //Ausgemaltes Rechteck
                gRechteck.Dispose(); //<- sinn? ^^
            }
            //Raster-Linien zeichnen
            else
            {
                LinienZeichnen();
            }
        }
        private void LinienZeichnen()
        {
            int i2 = -50;
            Graphics gRasterLinien = this.CreateGraphics();
            for (int i = 0; i <= 10; i++)
            {
                i2 = i2 + 50;
                gRasterLinien.DrawLine(Pens.Black, 0 + i2, 00 + i2, 500); //Senkrecht
                gRasterLinien.DrawLine(Pens.Black, 00 + i2, 5000 + i2); //Wagerecht
            }
            gRasterLinien.Dispose(); //<- macht das schon sind bei solchen kleinigkeiten?
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            // ????
        }
    }
}


Ganz einfach ich klicke in ein bestimmtes Feld (egal wo in dem Feld, Mitte... Oben... -> egal), und das gefüllte Rechteck richtet sich im raster ein bzw. könnte dann auch ein image sein. Also so ein Grid?. ^^

Fragen:
1.) wie kann ich das gezeichnete raster wieder am besten verschwinden lassen? Einfach übermalen oder gibt es eine art lösch-methoder ?
2.) Macht das Dispose, bei solchen kleinen Sachen schon sinn bzw. ab wann macht es Sinn?
3.) Wenn man z.b. ein anderes Fenster über dieses schiebt und die stellen wieder zum vor scheinen kommen sind sie lehr...
Weil sie neu gezeichnet wurden ??? (-> s. Form1_Paint), wie könnte ich das jetzt am besten machen?
Evtl. ein Array anlegen und darin abspeichern ob das feld gefüllt ist oder nicht, aber das scheint mir sehr verschwenderisch zu sein.

mmfg. TheLol :D

€dit:

Frage 3 hat sich schon erledigt ^^

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:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private int[,] arriFeld = new int[10+1,10+1];
        public Form1()
        {
            InitializeComponent();
            // Form1 ist ein stink normales Fenster mit der clientsize 500x500
        }
        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            //Rechteck zeichnen (im Raster)
            if (e.Button == MouseButtons.Left)
            {
                if (e.X <= 500 & e.Y <= 500// Spielfeld
                {
                    int iTestX = 0;
                    int iTestY = 0;
                    int iXZaehler = 0;
                    int iYZaehler = 0;
                    int iXBild = 0;
                    int iYBild = 0;
                    for (int j = 0; j <= 10; j++)
                    {
                        iXZaehler = iXZaehler + 50;
                        if (e.X <= iXZaehler)
                        {
                            iXBild = iXZaehler - 50;
                            iTestX = j+1;
                            break;
                        }
                    }
                    for (int j2 = 0; j2 <= 10; j2++)
                    {
                        iYZaehler = iYZaehler + 50;
                        if (e.Y <= iYZaehler)
                        {
                            iYBild = iYZaehler - 50;
                            iTestY = j2+1;
                            break;
                        }
                    }
                    arriFeld[iTestX,iTestY] = 1;
                    //MessageBox.Show(iTestX.ToString() + ", " + iTestY.ToString());
                    Graphics gRechteck = this.CreateGraphics();
                    gRechteck.FillRectangle(Brushes.Red, iXBild + 1, iYBild + 14949); //Ausgemaltes Rechteck
                    gRechteck.Dispose(); //<- sinn? ^^
                }
            }
            else if (e.Button == MouseButtons.Right) //  <-  tests
            {
                CheckArraysTest();
            }

         }
        private void LinienZeichnen()
        {
            int i2 = -50;
            Graphics gRasterLinien = this.CreateGraphics();
            for (int i = 0; i <= 10; i++)
            {
                i2 = i2 + 50;
                gRasterLinien.DrawLine(Pens.Gray, 0 + i2, 00 + i2, 500); //Senkrecht
                gRasterLinien.DrawLine(Pens.Gray, 00 + i2, 5000 + i2); //Wagerecht
            }
            gRasterLinien.Dispose(); //<- macht das schon sind bei solchen kleinigkeiten?
        }
        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            LinienZeichnen();
            for (int iTest1 = 1; iTest1 <= 10; iTest1++)
            {
                for (int iTest2 = 1; iTest2 <= 10; iTest2++)
                {
                    if (arriFeld[iTest2, iTest1] == 1)
                    {
                        Graphics gRechteck = this.CreateGraphics();
                        gRechteck.FillRectangle(Brushes.Red, (iTest2-1)*50 + 1, (iTest1-1)*50 + 14949);
                    }
                }
            }
        }
        private void CheckArraysTest() //test
        {
            int iTestZaehler = 0;
            for(int iTest1 = 1; iTest1 <= 10; iTest1++)
            {
                //MessageBox.Show(iTest1.ToString());
                for (int iTest2 = 1; iTest2 <= 10; iTest2++)
                {
                    iTestZaehler++;
                    MessageBox.Show(iTestZaehler.ToString() + " = " + arriFeld[iTest2,iTest1].ToString());
                }
            }
        }
    }
}