C# Anfängerfrage !?

02/12/2015 20:16 nilspan#1
Heyho,

wir behandeln seit einigen Tagen C# in der Schule! Hier haben wir den Auftrag bekommen, uns so ein wenig mit dem Programm vertraut zu machen. Und ich wollte halt ein wenig mehr wissen, zudem ich im Internet nichts gefunden habe..

Code:
private void buttonStart_Click(object sender, EventArgs e)
        {
            
            Random Rot;
            Random Gruen;
            Random Blau;

            Random PositionX;
            Random PositionY;


            Int32 iRot;
            Int32 iGruen;
            Int32 iBlau;

            Int32 iPositionX;
            Int32 iPositionY;

            PositionX = new Random();
            PositionY = new Random();

            Rot = new Random();
            Gruen = new Random();
            Blau = new Random();



            for (int i = 0; i < 100; i++)

            {
                
                iPositionX = PositionX.Next(1, 1000);
                iPositionY = PositionY.Next(1, 500);


                iRot = Rot.Next(0, 255);
                iGruen = Rot.Next(0, 255);
                iBlau = Rot.Next(0, 255);

                System.Threading.Thread.Sleep(5);

                this.Refresh();

                this.button6.Location = new System.Drawing.Point(iPositionX, iPositionY);
                this.button6.BackColor = Color.FromArgb(iRot, iGruen, iBlau);

            }

        }
Also ganz simpel. Habe Drei Buttons: Start, Stop, button6!

Bei "Start" soll dem "button6" eine neue Farbe+Position zugeteilt werden und dies halt ziemlich oft und schnell! Solange bis ich "Stop" drücke. Doch ich bekomme die schleife einfach nicht zum stillstand :(

Habt ihr vielleicht ne Idee? :confused:
02/12/2015 20:25 snow#2
Ich habe nicht viel Erfahrung mit .NET, aber hier klingt ein Timer nützlich, der im startButton_Click Event gestartet und im stopButton_Click Event gestoppt wird. Das Tick-Event generiert dann eine neue Farbe und Position.
Man möge mich verbessern, ist nur eine Idee. :x

#moved
02/12/2015 21:07 tolio#3
^immer das was snow sagt :P

ansonsten kannst du alle zahlen auch mit nur einem Random objekt erzeugen, in etwa so

Code:
Random rnd = new Random();
iX = rnd.Next(x);
iY = rnd.Next(x);
02/12/2015 21:19 Zunft#4
Habe ebenfalls nicht viel Erfahrungen mit .net, ich würde der Einfachheit halber entweder zwei Threads vewenden, d.h. ein Thread ändert Farbe, Position, etc. das sähe dann im Pseudocode ungefähr so aus:

Code:
private void changeButton()
{
    for (int i = 0; i < 100; i++)

            {
                
                iPositionX = PositionX.Next(1, 1000);
                iPositionY = PositionY.Next(1, 500);


                iRot = Rot.Next(0, 255);
                iGruen = Rot.Next(0, 255);
                iBlau = Rot.Next(0, 255);

                System.Threading.Thread.Sleep(5);

                this.Refresh();

                this.button6.Location = new System.Drawing.Point(iPositionX, iPositionY);
                this.button6.BackColor = Color.FromArgb(iRot, iGruen, iBlau);

            }
}

Thread thread;

private void buttonStart_Click(object sender, EventArgs e)
{
thread = new Thread(changeButton);
thread.start();
}

private void buttonStop_Click(object sender, EventArgs e)
{
thread.stop();
}
oder alternativ mit einer einfachen if-Verzweigung in der Schleife (ebenfalls im Pseudocode)

Code:
    for (int i = 0; i < 100; i++)

            {
                
                iPositionX = PositionX.Next(1, 1000);
                iPositionY = PositionY.Next(1, 500);


                iRot = Rot.Next(0, 255);
                iGruen = Rot.Next(0, 255);
                iBlau = Rot.Next(0, 255);

                System.Threading.Thread.Sleep(5);

                this.Refresh();

                this.button6.Location = new System.Drawing.Point(iPositionX, iPositionY);
                this.button6.BackColor = Color.FromArgb(iRot, iGruen, iBlau);

if(buttonStop.clicked())
    break;

            }
02/14/2015 13:34 FreewayC#5
Hi,

ohne deinen Code groß umschreiben zu müssen:

Variable "i" außerhalb des ButtonEvents deklarieren.
Code:
private int i;
For Schleife ändern
Code:
for (i = 0; i < 100; i++)
Stop Button
Code:
i = 100;
Mit freundlichen Grüßen
freewayc