Jump to content

C# Listbox vullen


Recommended Posts

Geplaatst:

Hoi, IK heb een vraag over het vullen van een Listbox in C#

Het zit namelijk zo: Ik heb een listbox die gevuld moet worden met 15 random getallen als ik op de juiste button klik. Aangezien ik een beginner ben met C# zou ik niet weten hoe dit moet.

Indien iemand mij kan laten zien hoe dit moet zou ik dit zeer op prijs stellen.

Geplaatst: (bewerkt)

Hoi,

Ik heb op dit moment niets bij de hand maar ik type dit even uit mijn hoofd:

void Knop_Click(Object sender, EventArgs e)
{
int i = 0;
var random = new Random();
while(i < 14)
{
int randomNumber = random.Next(1, 100000);
listBox1.Items.Add(randomNumber.ToString());
i++;
}
}

In deze code ga ik er vanuit dat:

  • Je C#.NET gebruikt (aangezien je niet vermeld of je .NET vermeld, maar dat is vrij aannemelijk)
  • Je button als naam 'Knop' heeft en dat je de Click-event al gedeclareerd hebt (In Visual Studio dubbelklikken op de knop en de code wordt automatisch aangemaakt)
  • Je listbox de naam 'listBox1' heeft.
  • Je random getallen wilt hebben tussen de 1 en de 5000000. (Kan je zelf aanpassen)

Succes, laat maar horen of het gelukt is! :)

Bewerkt: door ZaroX
Geplaatst: (bewerkt)

Hey bedankt man, het is gelukt.

EDIT: Helaas ben ik nu met een bubblesort bezig, ik heb dus de twee listboxes gevuld met de waarden van 1 tot 1000. Wanneer ik dan op de knop klik moet de bubblesort worden uitgevoerd. Ik krijg helaas deze melding: InvalidArgument=Waarde van 14 is niet geldig voor index.

Bewerkt: door GloriousDa7
Geplaatst:

Ik gok dat je voor een goed antwoord even een stukje uit je code moet plakken: het stuk waarin de fout zich vertoond.

Geplaatst: (bewerkt)

Ik gok dat je voor een goed antwoord even een stukje uit je code moet plakken: het stuk waarin de fout zich vertoond.

 private void BubbleSort(ListBox lstBox3)
 {
	 int aantal = 0;
	 bool sorted = false;
	 string temp = "";
	 aantal = lstBox3.Items.Count - 1;
	 while (sorted == false)
	 {
		 sorted = true;
		 for (int teller = 0; teller < aantal; teller++)
		 {
			 if (string.Compare(lstBox1.Items[teller].ToString(), lstBox2.Items[teller + 1].ToString()) > 0)
			 {
				 sorted = false;
				 temp = lstBox3.Items[teller].ToString();
				 lstBox1.Items[teller] = lstBox2.Items[teller + 1];
				 lstBox3.Items[teller + 1] = temp;
			 }
		 }
	 }
 }
 private void btnBubbleSort_Click(object sender, EventArgs e)
 {
	 lstBox3.Items.AddRange(lstBox1.Items);
	 lstBox3.Items.AddRange(lstBox2.Items);
	 BubbleSort(lstBox3);
 }

 private void btnFill1_Click(object sender, EventArgs e)
 {
	 {
		 int i = 0;
		 var random = new Random();
		 while (i < 14)
		 {
			 int randomNumber = random.Next(1, 1000);
			 lstBox1.Items.Add(randomNumber.ToString());
			 i++;
		 }
	 }

 }
 private void btnFill2_Click(object sender, EventArgs e)
 {
	 {
		 {
			 int i = 0;
			 var random = new Random();
			 while (i < 14)
			 {
				 int randomNumber = random.Next(1, 1000);
				 lstBox2.Items.Add(randomNumber.ToString());
				 i++;
			 }
		 }

Bewerkt: door GloriousDa7
Geplaatst:

En op welke regel precies vertoond zich de fout?

if (string.Compare(lstBox1.Items[teller].ToString(), lstBox2.Items[teller + 1].ToString()) > 0)

Geplaatst:

Je voegt llstBox1 en lstBox2 toe aan lstBox3, waardoor de grootte van lstBox3 gelijk is aan die van lstBox1 + die van lstBox2. Hierna laat je je teller lopen tot de grootte van lstBox3, maar vraag je wel de positie op van lstBox1 en lstBox2 welke een veel kleinere grootte hebben. Als je in die regel waar de fout optreedt je lstBox1 en lstBox2 vervangt door lstBox3 zou de bubblesort volgens mij moeten werken. Dit zal je onder deze regel dan ook moeten veranderen uiteraard, dus in de methode 'Bubblesort' moet je enkel met lstBox3 werken.

Het algoritme is trouwens nog niet geoptimaliseerd, je kan bijvoorbeeld de variabele aantal na elke iteratie in de while-lus met één verlagen, aangezien je het grootste element altijd op het einde plaatst. Dit zal niets aan de tijdscomplexiteit van het algoritme veranderen maar het zal wel sneller gaan (pas merkbaar bij lijstgroottes rond de 10 miljoen, maar goed emo.gif).

Daarnaast kan je volgens mij de items beter casten naar integers en deze te 'comparen', anders zal het string comparison zijn en is 10 bijvoorbeeld kleiner dan 2, al hangt dit af van de comparator.

Geplaatst:

Het algoritme is trouwens nog niet geoptimaliseerd, je kan bijvoorbeeld de variabele aantal na elke iteratie in de while-lus met één verlagen, aangezien je het grootste element altijd op het einde plaatst. Dit zal niets aan de tijdscomplexiteit van het algoritme veranderen maar het zal wel sneller gaan (pas merkbaar bij lijstgroottes rond de 10 miljoen, maar goed emo.gif).

Ik snap de opmerking niet? Bedoel je dat na elke comparable wisseling je de volgende loop één loop minder hoef te lopen? Dat is niet waar aangezien Bubblesort alleen 2 getallen naast elkaar verwisselt en niet het getal dat lager is zover mogelijk achterin zet.

En Bubblesort is inderdaad niet het meest efficiënte :puh:. Ik neem aan dat dit een schoolopdracht is ofzo? Als je met veel getallen gaat werken zou je ook nog threads kunnen gebruiken.

Geplaatst:

Ik snap de opmerking niet? Bedoel je dat na elke comparable wisseling je de volgende loop één loop minder hoef te lopen? Dat is niet waar aangezien Bubblesort alleen 2 getallen naast elkaar verwisselt en niet het getal dat lager is zover mogelijk achterin zet.

Niet na elke wisseling, maar na elke reeks van wisselingen in de for lus. Dus de verlaging van aantal zou moeten gebeuren na de for lus, maar nog binnen de while lus. Dan zal het grootste getal namelijk achteraan gezet zijn, en kan je dus verder werken met de lijst, verminderd met het laatste element. Maar goed, ik wil de TS nu niet verwarren, dus je negeert deze opmerking misschien beter. :puh:

Geplaatst:

Nu komt er een nieuwe foutmelding

sorted = false;
				    temp = lstBox3.Items[teller].ToString();
				    lstBox2.Items[teller] = lstBox3.Items[teller + 1];
				    lstBox3.Items[teller + 1] = temp;

InvalidArgument=Waarde van 14 is niet geldig voor index.

Iemand zei me dat het misschien met een for loop opgelost kon worden, iemand een idee?

Geplaatst:

Je moet alle listboxen in de if-conditie veranderen naar lstBox3 he, lees mijn uitleg nog eens goed door en als iets niet duidelijk is, vraag dan gerust door. Het belangrijkste is nog altijd dat je snapt waarom de fout er is, en niet dat wij je de oplossing geven en je die gewoon overneemt.

Het stukje code vervangen door onderstaand stukje zou het, volgens mij, moeten oplossen.

sorted = false;
                       temp = lstBox3.Items[teller].ToString();
                       lstBox3.Items[teller] = lstBox3.Items[teller + 1];
                       lstBox3.Items[teller + 1] = temp;

Ik snap trouwens ook niet goed waarom je .ToString() doet, maar ik heb nog nooit in C# gewerkt dus dat zal wel aan mij liggen. :puh:

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...