Gå til innhold

Anbefalte innlegg

Hei

Jeg har IT2 i 3. klasse på videregående, og skal ha eksamen om et par uker. Jeg har også spurt læreren om følgende spørsmål, men norske lærere er ikke alltid i verdensklasse. :thumbdown:

Problemet: Jeg trenger en måte å skrive ut en løkke til koden på (en løkke som endrer koden). Vi har lært å bruke løkker med utskrift til f.eks. en label, men noen ganger ville det vært praktisk å skrive ut til koden.

 

Oppdiktet eksempel i spoiler.

 

For å gi et eksempel, fant jeg på følgende scenario: Man har en ustyrsliste hvor man krysser av en checkbox for hva man ønsker. Hvert element har en egen checkbox. Prisene for hvert element er lagt i en array kalt pris. Man skal få summen av prisene til varene som er krysset av for (i variabelen totalt). Slik vi har lært må jeg gjøre følgende:

           int totalt = 0; 
           string bestilteVarer = "";
           int[] pris = { 220, 55, 800, 200 };

           if (cb1.IsChecked == true) //cb1 er den første checkboxen. 
           {
               totalt += pris[0];
           }
           if (cb2.IsChecked == true)
           {
               totalt += pris[1];
           }
           if (cb3.IsChecked == true)
           {
               totalt += pris[2];
           }
           if (cb4.IsChecked == true)
           {
               totalt += pris[3];
           }

 

Her er alle if-setningene nesten helt like, bortsett fra to tallverdier som øker med én for hver gang. Derfor tenkte jeg det ville være greit med en form for løkke. Selv om det kanskje går greit med 3-4 elementer, blir det fort mye kode hvis det er en lengre liste.

 

Endret av grizzlyx
Lenke til kommentar
Videoannonse
Annonse

En måte å gjøre det på er å gå igjenom gui-controllene og sjekke om de er av typen checkbox, om de er det sjekker du om de er merket og plusser det på summen.

int i = 0;
int sum = 0;
foreach (Control c in this.Controls)
{
 CheckBox checkbox = c as CheckBox;
 if (checkbox != null)
 {
   if(checkbox.IsChecked)
   {
     sum += pris[i];
   }
   i++;
 }
}

Lenke til kommentar

foreach (Control c in this.Controls)
{
 CheckBox checkbox = c as CheckBox;

Jeg er ikke helt med på disse to linjene. Hvordan er en "Control"-variabel? Jeg har ikke vært borti dette på skolen, så jeg vet ikke helt hvordan man bruker den. Vil denne c her få alle de samme egenskapene som avkryssningsboksen?

 

På linjen under antar jeg det opprettes en slags kunstig avkryssningsboks som i tur og orden får de samme egenskapene som avkryssningsboksene som skal sjekkes? Er det dette "c as CheckBox" betyr, eller er jeg helt på jordet? :hmm:

Lenke til kommentar

Jeg tror du missforstår hvordan .NET behandler slike ting internt.

CheckBox, Control, TextBox variabler er referanser og ikke kopier. Det CheckBox checkbox = c gjør, er å lage en ny referanse, sjekke om c er en referanse til en CheckBox. Dersom den er det, settes checkbox referansen lik c, ellers settes checkbox til null. Den lir da bokstavelig talt satt til null (0) fordi alle slike referanser er en intern peker til et objekt i minnet.

 

Et illustrerende eksempel:

Sett du driver en dagligvarehandel, du har en masse hylleplass som representerer datamaskinminnet. Alle varer har et varenummer som representerer datatyper (for eksempel V1024145 er Frokostblanding)

 

Hylleplasser kan være tomme, eller inneholde et objekt. Dersom du har en hylle full av varer, og du er ute etter frokostblanding, så går du igjennom alle varene i hylla (foreach(Control c in Controls)) sjekker om det er en frokostblanding av typen du er ute etter(CheckBox checkbox = c as CheckBox; if(checkbox != null)) og gjør det du skal, for eksempel sette på prislapp (checkbox.Text = "abc123")

Merk igjen at objekter er unike til enhver tid, å sette a = b fører normalt sett ikke til noen helst form for kopiering. Det finnes unntak som ved strukturer, heltall og flyttall, men for klasser som Controls vil a = b sette referanse a lik referansen b.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...