Archief - VB oefening.

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

MrBrightside

Legacy Member
Kan iemand mij helpen, ik geraak er niet uit (voor herexamen).. :/

De oefening is: “ Maak een formulier waarbij na een druk op de knop gevraagd wordt hoeveel sterren (*) je wilt zien. De uitvoer is een label met het gevraagde aantal sterren. Het aantal sterren kan niet groter zijn dan 100. Neem na telkens 10 sterren een nieuwe regel (VbCrLf)”

image001.png

*Fmc*

Legacy Member
Uw inputbox moet toch pas erop komen als je op een knop klikt? Zet die code dan achter een button_click event.

Verder heb je zoiezo nog een controle nodig om het aantal sterren te testen.

De oplossing is in feite heel simpel hoor. Gewoon even logisch nadenken. Ik zou hier snel de oplossing kunnen geven, maar daar leer je niets uit.

VbCrLf is trouwens oude VB-code. Beter is dit importeren:

Imports Microsoft.VisualBasic.ControlChars

En dan gewoon NewLine gebruiken, zoals bvb:

Label1.Text = Label1.Text & "* " & NewLine

Albireo

Legacy Member
Of System.Environment.NewLine, dan heb je die import niet nodig. ;)

BorisdK

Legacy Member
Dim intAantal As Integer = Integer.Parse(InputBox("Aantal sterren?", "Aantal?"))
If intAantal > 100 Then
MessageBox.Show("You must insert a value of 100 at most", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else

Dim intCounter As Integer = 1

For intCounter = 1 To intAantal
If intCounter Mod 10 = 0 Then
lblOutput.Text &= vbCrLf
Else
lblOutput.Text &= "*"
End If

Next
End If

Sorry voor Engels en NL door elkaar btw ;)
Die Dim intCounter = 1 hoeft overigens niet, doorda ge da bij die loop al doe, maar ik doe da hier om het ff duidelijk te maken. (Dim intCounter is genoeg)

Parnakra

Legacy Member
BorisdK zei:
Dim intAantal As Integer = Integer.Parse(InputBox("Aantal sterren?", "Aantal?"))
If intAantal > 100 Then
MessageBox.Show("You must insert a value of 100 at most", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else

Dim intCounter As Integer = 1

For intCounter = 1 To intAantal
If intCounter Mod 10 = 0 Then
lblOutput.Text &= vbCrLf
Else
lblOutput.Text &= "*"
End If

Next
End If

Sorry voor Engels en NL door elkaar btw ;)
Die Dim intCounter = 1 hoeft overigens niet, doorda ge da bij die loop al doe, maar ik doe da hier om het ff duidelijk te maken. (Dim intCounter is genoeg)
Neen.
BorisdK zei:
obv ga je die import wel gebruiken, maakt je code veel duidelijker. (:
En neen.

BorisdK

Legacy Member
Parnakra zei:
Ik daag je uit om die code te laten lopen en een screenshot van het resultaat te posten die voldoet aan de opgave. :)

Sec

edit; zit idd een fout in, had nt uitgevoerd; maar ff in notepad gemaakt :d

edit2;

Dim intAantal As Integer = Integer.Parse(InputBox("Aantal sterren?", "Aantal?"))
If intAantal > 100 Then
MessageBox.Show("You must insert a value of 100 at most", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Dim intCounter As Integer
For intCounter = 1 To intAantal
lblOutput.Text &= "*"
If intCounter Mod 10 = 0 Then
intAmount += 1
lblOutput.Text &= vbCrLf
End If
Next
End If
http://i53.tinypic.com/ka4sxk.png

*Fmc*

Legacy Member
Ik zou dat trouwens met een Stringbuilder maken ipv gwn appenden met .Text
Veel efficiënter.

Integer.Parse is trouwens ook oude code :p
Nu moet je steeds Convert.... gebruiken.
Bvb:

Convert.ToString()
Convert.ToInt32()
etc

BorisdK

Legacy Member
*Fmc* zei:
Ik zou dat trouwens met een Stringbuilder maken ipv gwn appenden met .Text
Veel efficiënter.

Integer.Parse is trouwens ook oude code :p
Nu moet je steeds Convert.... gebruiken.
Bvb:

"moet"?

CInt is dan nog ouder zeker? :p

voltje

Legacy Member
BorisdK zei:
obv ga je die import wel gebruiken, maakt je code veel duidelijker. (:

Dus jij vind het veel duidelijker als er int midden van uw code staat:


Functiemeteenlelijkenaam();

Ipv:

MyPackage.Helpers.ActiveDirectory.Functiemeteenlelijkenaam();

In sommige gevallen schrijf ik zelf het tweede voor duidelijkheid, natuurlijk moet een functienaam zelf al veel zeggen... Maar soms kan de namespace je een duidelijker beeld geven over wat die ene regel doet...
Maar je begrijpt heus wel wat ik bedoel.

Soms kan het btw niet anders en MOET je de volledige namespace gebruiken (of er een variable aan koppelen):

using myPackage = MyPackage.Helpers.ActiveDirectory;

myPackage.Functiemeteenlelijkenaam();


Ik denk voorbeelden genoeg waar je niet "zomaar" de imports/using gebruikt...
Dus 't is wa kort door den bocht wat je zegt.



Gebruik btw inderdaad stringbuilder en Convert.ToInt32

BorisdK

Legacy Member
voltje zei:
Dus jij vind het veel duidelijker als er int midden van uw code staat:


Functiemeteenlelijkenaam();

Ipv:

MyPackage.Helpers.ActiveDirectory.Functiemeteenlelijkenaam();

In sommige gevallen schrijf ik zelf het tweede voor duidelijkheid, natuurlijk moet een functienaam zelf al veel zeggen... Maar soms kan de namespace je een duidelijker beeld geven over wat die ene regel doet...
Maar je begrijpt heus wel wat ik bedoel.

Soms kan het btw niet anders en MOET je de volledige namespace gebruiken (of er een variable aan koppelen):

using myPackage = MyPackage.Helpers.ActiveDirectory;

myPackage.Functiemeteenlelijkenaam();


Ik denk voorbeelden genoeg waar je niet "zomaar" de imports/using gebruikt...
Dus 't is wa kort door den bocht wat je zegt.



Gebruik btw inderdaad stringbuilder en Convert.ToInt32

Miss ff lezen "die import" en dus niet "elke keer import" :)

Albireo

Legacy Member
Nochtans als je 10000 keer zo'n tekst op een label moet zetten, zal de oplossing met StringBuilder véél sneller zijn dan telkens de text-property van het label te appenden (15 keer sneller op mijn computer :p).

Voorbarige optimalisatie mag dan wel de wortel van alle kwaad zijn en alle optimalisatie is in principe in deze opdracht voorbarig maar het gebruik van StringBuilder voor string concatenation zou je ook simpelweg als "good practice" kunnen beschouwen i.p.v. optimalisatie.


Zou de vraagsteller ondertussen begrepen hebben dat de sleutel tot het oplossen van dat vraagstuk ligt in het gebruik van de modulo-operator om te bepalen wanneer een NewLine te plaatsen? :unsure:

BorisdK

Legacy Member
Albireo zei:
Zou de vraagsteller ondertussen begrepen hebben dat de sleutel tot het oplossen van dat vraagstuk ligt in het gebruik van de modulo-operator om te bepalen wanneer een NewLine te plaatsen? :unsure:

Hij heeft nog niet eens gereageerd :d

voltje

Legacy Member
Stringbuilders zijn niet altijd performanter. In dit geval wel natuurlijk :-)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan