hoe krijg ik mijn checkboxes werkende..? pls ASAP

Status
Niet open voor verdere reacties.

bednar

Gebruiker
Lid geworden
16 nov 2006
Berichten
16
hallo mensen ik heb een vraagje:

ik heb een programmatje gemaakt waarmee ik het gemiddelde cijfer kan uitreken van 8 leerlingen. hierbij heb ik gewoon 9 textboxes, in 8 van deze textboxes kan ik de cijfer van leerlingen in vullen en in de 9e textbox komt uiteindelijk het gemiddelde staan. maar het probleem is: nu wil ik voor elk textboxje waar je cijfers in moet vullen een checkbox hebben waarmee je ervoor kan zorgen dat het cijfer erachter 2x mee kan tellen... ik kom er alleen niet uit.

ik hoop dat jullie mij kunnen helpen.

btw. dit is c# en niet c++... ik kon C# namelijk niet vinden...

dit is mijn script:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace project
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click_1(object sender, EventArgs e)
{
double som, aantal;
double gemiddelde;
som = 0; aantal = 0; gemiddelde = 0;

for (int t2 = 1; t2 < 9; t2++)
{
if (textBox1.TabIndex == t2)
{
if (textBox1.Text != "")
{
if (Int32.Parse(textBox1.Text) > 0)
{

if (checkBox1.Checked)
som = som + Int32.Parse(textBox1.Text);
aantal++;
}
}
}
if (textBox2.TabIndex == t2)
{
if (textBox2.Text != "")
{

if (Int32.Parse(textBox2.Text) > 0)
{
som = som + Int32.Parse(textBox2.Text);
aantal++;
}
}
} if (textBox3.TabIndex == t2)
{
if (textBox3.Text != "")
{
if (Int32.Parse(textBox3.Text) > 0)
{
som = som + Int32.Parse(textBox3.Text);
aantal++;
}
}
} if (textBox4.TabIndex == t2)
{
if (textBox4.Text != "")
{
if (Int32.Parse(textBox4.Text) > 0)
{
som = som + Int32.Parse(textBox4.Text);
aantal++;
}
}
} if (textBox5.TabIndex == t2)
{
if (textBox5.Text != "")
{
if (Int32.Parse(textBox5.Text) > 0)
{
som = som + Int32.Parse(textBox5.Text);
aantal++;
}
}
} if (textBox6.TabIndex == t2)
{
if (textBox6.Text != "")
{
if (Int32.Parse(textBox6.Text) > 0)
{
som = som + Int32.Parse(textBox6.Text);
aantal++;
}
}
} if (textBox7.TabIndex == t2)
{
if (textBox7.Text != "")
{
if (Int32.Parse(textBox7.Text) > 0)
{
som = som + Int32.Parse(textBox7.Text);
aantal++;
}
}
} if (textBox8.TabIndex == t2)
{
if (textBox8.Text != "")
{
if (Int32.Parse(textBox8.Text) > 0)
{
som = som + Int32.Parse(textBox8.Text);
aantal++;
}
}
}


gemiddelde = som / aantal;
textBox10.Text = gemiddelde.ToString();

}

}

private void btnLeegmaken_Click_1(object sender, EventArgs e)
{
foreach (Control ctrl in this.tabPage1.Controls)
{
string typeCtrl = Convert.ToString(ctrl.GetType());
if (typeCtrl == "System.Windows.Forms.TextBox")
{
ctrl.Text = "";
}
}

}

private void stoppen_Click(object sender, EventArgs e)
{
this.Close();
}



}
}
 
Voor alle testbox instances doe je eerst een if(textBox?.TabIndex == t2); Waarvoor is dit?
Verder ben je achter if(checkBox1.Checked) de { en } vergeten te zetten. De opdracht aantal++ wordt dus onafhankelijk daarvan uitgevoerd.

Verder zeg je dat een getal dubbel geteld moet worden als de checkbox gechecked is. Je kunt dan eenvoudig het getal 2 keer bij de som optellen en de variabele 'aantal' met 2 ophogen.
 
Sauria heeft gelijk, wat er nu gebeurt in de statement

if (checkBox1.Checked)
som = som + Int32.Parse(textBox1.Text);
aantal++;


is als je het een beetje uitschrijft zoiets als

if(checkBox1.Checked)
{
som = som + Int32.Parse(textBox1.Text);
}
else // dus if(checkBox1.Unchecked)
{
// doe niks
}
aantal++;


Wat je zou willen is

if(checkBox1.Checked)
{
som = som + 2 * Int32.Parse(textBox1.Text);
aantal = aantal + 2;
}
else // dus if(checkBox1.Unchecked)
{
som = som + Int32.Parse(textBox1.Text);
aantal = aantal + 1;
}


Dat kun je ook schrijven als
int gewicht = 1;
if(checkBox1.Checked)
{
gewicht++;
}
som += gewicht * Int32.Parse(textBox1.Text);
aantal += gewicht;


Ik denk dat dit (op syntax na..) zou moeten werken.

Overigens heb je een beetje een vreemde manier om door je tekstvelden te lopen. Doordat je de code voor de 8 componenten toch 8 keer uitschrijft, kun je net zo goed de for-lus weghalen. (Het enige wat ie doet is zorgen dat de dingen op volgorde van hun tabIndex worden doorgelopen, maar dat hoeft helemaal niet..).

Onderin je programma gebruik je (foreach Control ctrl...), waarom gebruik je dat hier niet ook? Is de reden daarvoor dat je dan niet weet welke checkbox bij welk tekstveld hoort? Als dat zo is, zou het een nettere manier zijn om een object te maken dat een tekstveld extend én een checkbox bevat, en dat opject samen als Control aan het window toe te voegen. (Ik weet alleen niet hoe dat werkt in de designer van Visual C#...) Als je dat gaat doen, is het ook netter om in dat object de string te testen en naar een integer te parsen. (Je zou een property moeten maken voor gewicht en waarde, die je alleen mag lezen..) Om je docent helemaal te pleasen zou je daar dan ook de exceptions die Int32.Parse() gooit af kunnen vangen, zodat je programma niet crasht als je bijvoorbeeld "s1" invult!

Veel succes ermee!

PS C# : programmeren -> .net -> c#
 
Laatst bewerkt:
Het gaat hierbij om een cijferlijst van de leerlingen?

Ja zou natuurlijk een gridview kunnen gebruiken. Deze kun opmaken
door een table.

bv:
Les | cijfer | IsProefwerk

code:
string | int32 | boolean.

Voordeel is dat het uitlezen van een tabel erg gemakkelijk is,
en als de lijst groter wordt, je niet meer textvelden hoeft toe te voegen.
Als je hier een component maakt, kun je gemakkelijk voor elk persoon
dit component toevoegen.
 
Wat heeft dit met checkboxes te maken¿¿¿¿¿¿


(owja ¿ doe je met Alt + /)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan