Automatischer Farbwechsel - Teil 2

Machen Sie das Programm mit einer Endlosschleife endlos und fügen Sie eine weitere Schleife über die beiden Schleifen ein.

while (true)

ist z.B. eine Endlosschleife

 

Wenn Sie das Programm schließen möchten, kehrt die IDE nicht mehr in den Bearbeitungsmodus zurück.

Sie können es nur mit dem quadratischen Stopp-Button in der IDE oder im Debug-Menü (Debuggen beenden) beenden.

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 projekt4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int x = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            while (true) // Endlosschleife
            {
                for (x = 0; x <= 255; x++)
                {
                    this.BackColor = Color.FromArgb(x, 255 - x, x); //RGB-Farben

                    Application.DoEvents();

                    System.Threading.Thread.Sleep(1); //10ms Verzögerung
                }
                for (x = 255; x >= 0; x--)
                {
                    this.BackColor = Color.FromArgb(x, 255 - x, x); //RGB-Farben

                    Application.DoEvents();

                    System.Threading.Thread.Sleep(1); //10ms Verzögerung
                }
            }
        }
    }
}

 


Unser Programm soll geschlossen werden können. 

Wir ändern unsere Endlosschleife wie folgt:

while (true) in while (Visible)

while (Visible) läuft, solange das Formular sichtbar ist.

 

Wenn wir das Formular mit einem Klick auf das X-Kästchen beenden, können wir auch wieder in den Bearbeitungsmodus zurückkehren. 

 

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 projekt4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int x = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            while (Visible) // Solange das Formular sichtbar ist
            {
                for (x = 0; x <= 255; x++)
                {
                    this.BackColor = Color.FromArgb(x, 255 - x, x); //RGB-Farben

                    Application.DoEvents();

                    System.Threading.Thread.Sleep(1); //10ms Verzögerung
                }
                for (x = 255; x >= 0; x--)
                {
                    this.BackColor = Color.FromArgb(x, 255 - x, x); //RGB-Farben

                    Application.DoEvents();

                    System.Threading.Thread.Sleep(1); //10ms Verzögerung
                }
            }
        }
    }
}

 

Wenn Sie das Programm beenden, gibt es aber eine Verzögerung von ein paar Sekunden, bevor die IDE wieder in den Bearbeitungsmodus wechselt.

Die Verzögerung tritt ein, weil die for-Schleife zuerst enden muss, bevor die while-Schleife prüfen kann, ob Visible immer noch true ist.

Um diese Verzögerung auszuschalten, müssten wird die Prüfung (Ob Visible = true) direkt in der for-Schleife durchführen.

for (x = 0; x <= 255 && Visible; x++)