WPO 6

Naast de klassieke iteratiemethoden die we tot nu toe hebben gezien kunnen we in C# (WPF) ook gebruik maken van timers. Een timer is een object die op regelmatige tijdsintervallen een voorafbepaalde functie zal oproepen. Hoewel er nergens in de code een loop gedeclareerd hoeft te worden, zal de code die in die bepaalde functie geschreven staat regelmatig uitgevoerd worden. In WPF worden timers aangemaakt via de DispatcherTimer. Het aanmaken en gebruik van de timer wordt hieronder weergegeven. Merk op dat er een speciaal directief bovenaan de code toegevoegd moet worden. Dit wordt eveneens hieronder vermeld.

// put this after the last using... statement above in the code using System.Windows.Threading;
public partial class MainWindow : Window { // declare our timer as a global variable DispatcherTimer timer = new DispatcherTimer(); public MainWindow() { InitializeComponent(); } //-- event handler of a button on the form private void btnStart_click(object sender, RoutedEventArgs e) { // first clean our label of any content lblShow.Content = ""; // set function to call to our timer timer.Tick += timer_Tick; // give the interval at which the timer must call our function // in this case: 0 days, 0 hours, 0 minutes, 0 seconds and 200 milliseconds // frequency is thus 5Hz timer.Interval = new TimeSpan(0, 0, 0, 0, 200); // start our timer after the cleaning timer.Start(); } //-- the function which will be called by the timer //-- code inside this function will be repeated periodically //-- (here every 200ms) //-- until the timer is stopped: //-- timer.Stop(); private void timer_Tick(object sender, EventArgs e) { lblShow.Content = lblShow.Content + "X"; } }

Naast de timers zullen we vandaag een nieuwe beslissingsstructuur ontdekken: de switch case. Switch cases zijn naast de if-structuren een manier om het verloop van het programma te bepalen. De switch case structuur is een specialisatie op de if structuur. Bij de switch case is het enkel mogelijk om op gelijkheid te evalueren. Een tweede beperking op de if-structuur wordt gevormd doordat er enkel met voorafbepaalde waarden vergeleken kan worden! Ondanks deze beperkingen wordt de switch case gebruikt om de code meer leesbaar te maken (net zoals de for-loop). M.a.w. het is altijd mogelijk om een switch case om te vormen naar een if-structuur. Omgekeerd kan alleen als aan de beperkingen voldaan wordt. Een voorbeeld van een switch case wordt hieronder weergegeven.

//-- usage of a switch case structure //-- first decalre necessary variables int value = 10; //-- do not forget the brackets! switch (value) { //-- use "case" + value + ":" //-- note that a function can not be used //-- to compare against! case 0: //-- do something when value equals 0 //-- can be a statement of function //-- or else //-- end with the break statement break; case 5: //-- do something when value equals 5 //-- can be a statement of function //-- or else //-- end with the break statement break; case 10: //-- do something when value equals 10 //-- can be a statement of function //-- or else //-- end with the break statement break; default: //-- do something when previous values ar not met //-- can be a statement of function //-- or else //-- end with the break statement break; }

De variabele dat hier gebruikt is, is van het type integer. De programmeur kan hier in principe zelf het (enkelvoudige) type kiezen, maar de integer, string, char en enums worden het vaakst gebruikt. Functies kunnen niet gebruikt worden om mee te vergelijken binnen de switch case (dus case function), enkel een voorafbepaalde waarde!

Als laatste zal een introductie gegeven worden tot de combobox. Een combobox is een dropdown element dat toelaat om een bepaalde selectie te kiezen. Het gebruik van een combobox gebeurt door deze eerst in te vullen. nadien kan men, indien een waarde geselecteerd is, de waarde bepalen via de selected index eigenschap. Het geheel wordt hieronder weergegeven.

// Fill in the combobox with a few values (string only). cmbBox.Items.Add("Print in volgorde af"); cmbBox.Items.Add("Print in omgekeerde volgorde af"); cmbBox.Items.Add("Print randomwaarden af");

De juiste waarde uit de combobox opvissen kan als volgt:

// Code that resides in a button int index = cmbBox.SelectedIndex; switch (index) { case -1: // when no value has been selected (no mouse event on the combobox MessageBox.Show("Ongeldige keuze"); break; case 0: // first element of the itmes in a combobox MessageBox.Show("Print in volgorde af"); break; case 1: MessageBox.Show("Print in omgekeerde volgorde af"); break; case 2: MessageBox.Show("Print randomwaarden af"); break; default: // out ofrange for the combobox MessageBox.Show("Geen geldige waarde gekozen"); break; }

De index van het geselecteerde item van de combobox kan ook gebruikt worden elementen uit een array/lijst aan te spreken (zie later).