10 Labels vullen in loop?

Status
Niet open voor verdere reacties.

flandria4

Gebruiker
Lid geworden
6 aug 2010
Berichten
28
Hallo,

Ik werk met Visual Basic 10.0 en ik probeer de code te vinden om 10 labels in een loop te vullen met een random gegenereerde waarde waarvan ik de code al heb.

Ik heb me al ziek gezocht hoe ik dit zou kunnen doen maar geen enkele oplossing werkt. Hier een voorbeeld van wat ik zou willen bereiken:

Dim x As Integer
For x = 1 to 10
"Label & x".Text = "test"
Next

Alle tien de labels zouden dan moeten gevult worden met 'test'. Hier een gedeelte van een mail die ik al eens gestuurt had om help te vragen, daarin zie je wat ik al zelf had gevonden:
Mijn probleem is dat ik niet door 10 labels kan loopen om daar dan tekst in te zetten.

Ik zou bevoorbeeld

For X = 1 to 10
Me.("lblOef" & X).Text = "test"
Next X

zoiets gelijkaardigs willen doen. Aangezien vb.net dit niet accepteerd heb ik de volgende manieren geprobeerd:

1.

Dim testLbl 'As Label ' As String
testLbl = Label & intTeller
testLbl.text = "test"

2.

For intTeller = 1 to 10

Me.Controls("lblOef" & intTeller).Text = "test"

next

3.

For intTeller = 1 to 10

Dim lbl = Controls("lblOef" & intTeller)
lbl.Text = "test"

Next

4. (Door alle controls loopen en adhv de soort & een naam de labels changen)

For Each lblTest As Control In Me.Controls
'If lblTest.GetType.ToString = "System.Windows.Forms.Label" And lblTest.Name.Contains("lblOef") Then
lblTest.Text = "test"
End If
Next

5. ( Zonder namefilter en met 'TypeName')

Dim lblTest As Control
For Each lblTest In Me.Controls
If TypeName(lblTest) = "Label" Then
lblTest.Text = "test"
End If
Next lblTest





Op dezelfde manier heb ik een probleem met mijn checkboxes te overlopen:

For t = 0 To 3
1. Dim test = Controls.Item("cbxSoort" & t + 1) ' kan niet gebruikt worden
2. If CType(frmOpties.Controls.Item("cbxSoort" & t + 1), CheckBox).Checked = True Then ' checkbox1, 2, 3, 4: checked = 1 unchecked = 0 'geeft geen error maar tijdens debug NullPointerException
3. If frmOpties.cbxSoort1.Checked = True Then '<- werkt maar slechts voor soort 1
4. cbxSoort & t .checked <- gaat niet
s(t, 1) = 1 'checked
Else 'soort (t): + - * / in volgorde is 1 of 0
s(t, 1) = 0 'unchecked
End If
Next

Als iemand een efficiente oplossing zou kunnen vinden zou ik dat enorm appreciëren.

Bij voorbaat dank,

Rémy
 
Laatst bewerkt door een moderator:
[cpp]For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is Label Then ctrl.Text = "test"
Next[/cpp]

Voìla.
 
Bedankt voor je antwoord!


Ik heb de code eens geprobeerd te implementeren maar dit lukt niet door andere foutmeldingen tijdens debug. Zelfs toen ik deze stukken code heb gecomment bleven de labels in mijn formulier leeg en de tekstboxen in het grijs staan -> bleef hangen.

Kan je me anders ook even helpen met de volgende stukken code?

Dit geeft geen error bij het programmeren maar tijdens het debuggen loopt het fout:

t is een teller
cbxSoort1-4 zijn vier checkboxen die in een formulier frmOpties die moeten aan of afgevinkt worden. De bedoeling is voor mijn project 'rekentrainer' om aan te duiden welke soort bewerkingen in de oefeningen mogen gegeven worden.
-> cbxSoort1-4 zijn in volgorde gelijk aan + - x :
-> als een soort is aangeduid moet in de array soort: "s(t,0)" dit aangeduid worden als 1, anders 0
-> de array zou de waarden +-*/ moeten bevatten om te gebruiken in random berekeningen.
For t = 0 To 3
If CType(frmOpties.Controls.Item("cbxSoort" & t + 1), CheckBox).Checked = True Then ' checkbox1, 2, 3, 4: checked = 1 unchecked = 0 :: kijkt welke soort is aangeduid 'geeft error
s(t, 1) = 1 'checked
Else 'soort (t): + - * / in volgorde is 1 of 0
s(t, 1) = 0 'unchecked
End If
Next


Hierbij zou ik ook moeten vermelden dat het niet lukt om de checkboxwaarden van frmOpties op te vragen. Zodra het formulier sluit ( Me.Hide() ) zijn de checkboxwaarden verloren.
Ik heb het al proberen opslaan met
SaveSetting("Rekentrainer", "StartUp", "Operatoren", cbxSoort4.Checked)
maar ik weet niet of het werkt aangezien ik deze waarden niet kan (weet) opvragen.
 
Laatst bewerkt:
Hier mijn rekenvoorbeeld project:

18934932.png

Download hier.

Volgens mij voldoet dit aan je eisen.
 
Hey JoZ1,

Ontzettend bedankt voor je laatste antwoord! Ik ben erg blij met de code.
Alleen; mijn rekentrainer moet ik maken als huiswerk, ik zou niet graag brainless iemand anders (professioneel) werk afgeven aan mijn leraar.

Daarom nog enkele vragen over je code vooraleer ik deze integreer in mijn project.

Wat moet de 48 + 4096 voorstellen? Ik zie dit meermaals met verschillende waarden terugkomen.
Code:
 MsgBox("U dient minimaal ��n operator te selecteren.", CType(48 + 4096, MsgBoxStyle), Me.Text)

De eerste keer dat ik de "Match" operator zie. Kan je het gebruik van de pattern uitleggen?
Code:
Dim operatorStr As String = Match(Operators.CheckedItems(operatorInt).ToString, "\(([^\)]+)\)").Value.Substring(1, 1)

Humm, bij Dim objRandom As New Random zou ik nog kunnen volgen...
1. Waarom integreer je de tijd?
2. Stelt (x, y) x= rest van max integer (2.147..)/ tijd in ticks y = soort type voor?
Code:
Dim objRandom As New System.Random(CType(System.DateTime.Now.Ticks Mod System.Int32.MaxValue, Integer))

Waarom zet je de maximumwaarde vast op 100 als je in het formulier dit kan wijzigen?
Code:
Public Function GetRandomNumber(Optional ByVal Low As Integer = 1, Optional ByVal High As Integer = 100) As Integer
        Return objRandom.Next(Low, High + 1)
    End Function

Dit moet NullPointerExceptions en andere errors filteren?
Code:
Catch ex As Exception
            MsgBox(ex.ToString, CType(16 + 4096, MsgBoxStyle), Me.Text)
        End Try


Ik ga mijn tekstboxen en labels verwijderen, dat is al een gigantisch probleem waar ik dan zelf vanaf ben. Ik zal ook mijn checkboxen elke keer bij start laten tevoorschijn komen, een schitterend idee.

Nogmaals, oneinig veel dank voor je hulp!
 
Ontzettend bedankt voor je laatste antwoord! Ik ben erg blij met de code.
Graag gedaan :)

Wat moet de 48 + 4096 voorstellen? Ik zie dit meermaals met verschillende waarden terugkomen.
Dit zijn constantes voor het weergeven van de MessageBox, een gewoonte van mij ;)
Het maakt het er niet leesbaarder op voor anderen, dus misschien is dit een beter alternatief:
[cpp]MsgBox("Test 1 2 3", MsgBoxStyle.SystemModal + MsgBoxStyle.Exclamation, "JoZ1 says:")[/cpp]

De eerste keer dat ik de "Match" operator zie. Kan je het gebruik van de pattern uitleggen?
Dat is een Regex (Regular Expressions) Match. Meer informatie.
Ik probeer met die regex match alles tussen haakjes te verkrijgen. :)

Humm, bij Dim objRandom As New Random zou ik nog kunnen volgen...
1. Waarom integreer je de tijd?
2. Stelt (x, y) x= rest van max integer (2.147..)/ tijd in ticks y = soort type voor?
Code:
Dim objRandom As New System.Random(CType(System.DateTime.Now.Ticks Mod System.Int32.MaxValue, Integer))
1. Dat is niet de tijd, maar de de restbepaling (modulo-operatie) tussen het aantal 'Ticks' en de grootste waarde van een 32-bit integer. Dit doe ik om het écht random te houden. Als je achter elkaar twee random-getallen initialiseert, zijn ze hetzelfde omdat de System.Random class uitgaat van het aantal milliseconden.

2. x = waarde als object (in dit geval dus die restbepaling, zie 1), y = type. Ik converteer hier gewoon x naar het type y omdat ik een integer nodig heb om mee te werken ;)

Waarom zet je de maximumwaarde vast op 100 als je in het formulier dit kan wijzigen?
Code:
Public Function GetRandomNumber(Optional ByVal Low As Integer = 1, Optional ByVal High As Integer = 100) As Integer
        Return objRandom.Next(Low, High + 1)
    End Function
Het is Optional. Dus het geldt alleen als je niets in zou vullen :)

Dit moet NullPointerExceptions en andere errors filteren?
Code:
Catch ex As Exception
            MsgBox(ex.ToString, CType(16 + 4096, MsgBoxStyle), Me.Text)
        End Try
Sterker nog: het filtert álle exceptions ;)
 
Echt tof van je dat je me hebt geholpen.

Ik was net nog ijverig bezig aan mijn code, tot ik plots na het toevoegen van een achtergrondafbeelding (en verwijderen van 4 pictures in een toegevoegde extra map) mijn ToolStripMenuItem verloor...
Ik heb dit opnieuw proberen toevoegen maar het bleef maar verwijderd worden (leeg) en als ik eenmaal alles had KUNNEN benoemen en opnieuw aanmaken verdween de hele balk nadat ik de namen in mijn code had aangepast.
Redelijk vervelend aangezien dit heel veel tijd en energie kostte en mijn rekentrainer toch zeker nog wat testwerk kon gebruiken. (Alles startte via Toolstrip)

Ik dacht er nog over om btn's te gebruiken, maar omdat dit er teveel zouden worden en ik morgen (nouja, straks) dit project toch moet indienen leek me het een verloren zaak.

Dit is er uiteindelijk van geworden, er zijn nog enkele aanpassingen nodig in de code en layout (vooral toolstripmenuitems die ik bleef aanmaken en niet meer weg kreeg).


Stom dat het zo is geëindigt. Ik had gehoopt het te kunnen afwerken. :(


Ik laat deze thread nog even open voor mensen die eventueel ideeën hebben omtrent mijn toolstripprobleem.

Voor anderen: code mag je vrij gebruiken, als je er nog wat van zou kunnen maken.
 
Ik kan 'm niet downloaden. Error 404: File not found :P
 
Ja, ziet er prima uit!

Alleen ik snap niet waarom je het formHome erin hebt gelaten?
 
frmHome is mijn startformulier. Vanuit daar kon ik via een menutoolstrip als volgt doen:

|Start!_Moeilijkheidsgraad _Tafels_|
|_____|_0 tot 10________|______|
|_____|_0 tot 20________|______|
|_____|_0 tot 100_______|______|
|_____|_Aangepast...____|______|
|_____|________________|______|
Aangepast zorgde ervoor dat Min, Max en Aant enabeled waren., anders werden preset variabelen gebruikt.
Aangezien mijn ToolStripMenuItem het laat afweten is de code onbruikbaar geworden :s

Start!: Start jou formuliergedeelte
Moeilijkheidsgraad: Dropdownlist
0 tot 10,20,100, de variabelen die overeenstemmen met de waarden Min, Max en Aant worden respectievelijk preset op 0, 10-20-100, 10
Aangepast...: De waarden worden geselecteerd bij het starten van het formulier.
Tafels: Start het 'tafels' gedeelte. Een tafel moet worden ingegeven en alles van 1-10 moet door elkaar worden afgelopen zonder enige duplicaten.

bv. input = 5

2 x 5 = ...
9 x 5 = ...
5 x 5 = ...
3 x 5 = ...
7 x 5 = ...
8 x 5 = ...
1 x 5 = ...
6 x 5 = ...
4 x 5 = ...

Dat is ook nog niet waterdicht bij mij. Ik kwam hier pas achter na het maken van de code en ipv opnieuw te beginnen zooi ik er graag nog wat aan xd
 
Laatst bewerkt:
Ja dat is juist het probleem, de toolstrip verdwijnt constant :(

Hij blijft wel in properties staan.



----
Oplossing gevonden; iemand met precies hetzelfde problem.

Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.StartToolStripMenuItem, Me.MoeilijkheidsgraadToolStripMenuItem, Me.TafelsToolStripMenuItem})


en


Me.MoeilijkheidsgraadToolStripMenuItem.DropDownItems.Add(tsm0tot10)
Me.MoeilijkheidsgraadToolStripMenuItem.DropDownItems.Add(tsm0tot20)
Me.MoeilijkheidsgraadToolStripMenuItem.DropDownItems.Add(tsm0tot100)
Me.MoeilijkheidsgraadToolStripMenuItem.DropDownItems.Add(tsmAangepast)


moest ik toevoegen in frmHome.Designer.vb



------------


Het is af! Eindelijk!
Oké, het zou nog wat tweeking kunnen gebruiken mar het doet wat het moet doen :)

Dit is de final version, wel een setup, dus volledig bruikbaar voor iedereen. (met .NET..)


Voor een laatste keer: ONTZETTEND bedankt JoZ1 voor de hulp! Zonder jou input was het zeker niet gelukt!

@Bloodshed: vb maakte inderdaad wat opmerkingen... ik heb dat alles wat teveel was gewoon in comments gestoken. Werkt perfect :P
May this thread rest in peace.
 
Laatst bewerkt:
Zul je even in de designer met de hand de items moeten herstellen voor de menu strip, en de daarbij behorende dropdownitems.
Ik zou het form toch opnieuw maken want er zijn zo te zien nog allemaal oude menu items die achter gebleven zijn.

5mzprl.jpg
 
Het programma zelf ziet er leuk uit (met die Rémy van Ratatouille :cool:)
alleen de antwoorden kloppen niet helemaal :confused:
hGMnb.png


Sowieso mag je nooit door nul delen.
Daar had ik als het goed is een beveiliging voor ingebouwd...
 
Ja, nu dat ik dat gedeelte test merk ik het ook...

Raar, ik had je beveiliging om te delen door 0 erin verwerkt, AFAIK.

Nog even prutsen aan mijn antwoorden.
 
Bij dit soort programma's zou je zeker er goed aan doen om unit tests te maken.
Je maakt een class (ideaal een apparte dll) en zet daar je tests in zoals in dit voorbeeld (C#). Nadat je iets in je methods veranderd kun je test tests doen tot dat alles werkt zoals het hoort:

vs0v3s.jpg


Je ziet dat de Math5Times10ShouldBe50 method faalt en het probleem zal in AnotherCalculateMethod zitten, als je daar kijkt zie je dat ik per ongeluk x * x doe ipv x * y. Zodra je dit aanpast en de tests weer doet zullen ze allemaal slagen en weet je dat je methods het goed doen.
 
Laatst bewerkt:
Unit tests? O_o
Ik begrijp waar je naar toe gaat, maar dit is veel te complex voor zo'n eenvoudig programmatje, lijkt me.
Met de kennis die ik nu heb zou ik dit niet kunnen doen geloof ik. Ik sta natuurlijk altijd open voor nieuwe ideeën en zal er zeker nog eens naar kijken :)

Dankje voor de input.


----------------------------------
Update: Heb wat aangepast

.exe: http://goo.gl/PkK1Z

Project: http://goo.gl/MZjUz

Bevat nog steeds enkele fouten zoals dubbele oefeningen in dezelfde reeks :s
 
Laatst bewerkt:
heel wijs :thumb:

(je hebt tog een mooi icon gemmakt zie ik ? waarom gebruik je hem niet in je form ?)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan