xP. Ik heb geen idee of het makkelijker is, maar volgens Joz1 wel.
Maar wat denk jij dat ik nu het beste kan doen?
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Aangezien het met het panel eerst niet helemaal goed ging en je van plan bent nu een listbox te gaan gebruiken, zou ik zeggen dat het wel loont om het opnieuw te bouwen... Maar als er nog veel andere controls op het oude form staan, dan is het misschien niet zo handig...
Maar uiteindelijk is het jouw keuze...![]()
Ben net een nieuw project begonnen, en heb jouw code gebruikt:
Nu rest mij eigenlijk alleen de vraag, hoe zorg ik ervoor datCode:Dim getallen As Integer() = {3, 6, 5, 9, 1} Array.Sort(getallen) For Each i As Integer In getallen ListBox1.Items.Add(i) Next
de getallen (de reeds ingevoerde 3, 6, 5, 9, 1) veranderen naar de inhoud van de 10 textboxen? Want die inhoud zal uiteindelijk gesorteerd moeten worden. Er mogen geen letters instaan, en enkele mogen ook leeg ingevuld worden.Code:Dim getallen As Integer() = {3, 6, 5, 9, 1}
Scandax
!!! EDIT:
Heb de volgende code gemaakt, en het werkt redelijk:
De bovenstaande 'actie' gebeurd wanneer je op button 1 klikt.Code:Dim getallen As String() = {TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text, TextBox7.Text, TextBox8.Text, TextBox9.Text, TextBox10.Text} Array.Sort(getallen) For Each i As String In getallen ListBox1.Items.Add(i) Next
Nieuwe vraag: Als ik het cijfer 10 intype in een van de textboxen, komt de 10 1 rang boven de 1 te staan terwijl dit het grootste cijfer is. Hoe zorg ik ervoor dat de computer hem als laatste plaatst? Het is natuurlijk de bedoeling dat ze van groot naar klein worden gerangschikt.
Scandax
Laatst aangepast door Scandax : 2 april 2012 om 19:28
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Dat kun je beter zo doen:
CPP Code:
1 2 3 4 5 6 7 Dim nummers As New ArrayList For Each ctrl As Control In Me.Controls If TypeOf ctrl Is TextBox Then nummers.Add(ctrl.Text) Next nummers.Sort() For Each item As String In nummers : ListBox1.Items.Add(item) : Next
![]()
Ik neem aan dat alle textboxen in een panel staan:
De code werkt niet helemaal, aangezien er ook nog een aantal overbodige nullen bij komen te staan als er een textbox leeg is.... Dat is vast wel op te lossen, maar daar heb ik nu niet zoveel tijd voor...Code:Dim getallen(Panel1.Controls.Count) As Integer Dim teller As Integer = 0 For Each Txtbox As TextBox In Panel1.Controls If Not Txtbox.Text = Nothing Then If IsNumeric(Txtbox.Text) Then getallen(teller) = Txtbox.Text teller += 1 End If End If Next
Succes!
Toch nog even een verbetering:
Hierbij verdwijnen de extra nullen. Wat me nu wel was opgevallen, was dat de textboxen (bij mij) van onder naar boven werden uitgelezen. Als je alsnog de sort functie gebruikt, zal je daar geen last van hebben.Code:Dim getallen(Panel1.Controls.Count) As Integer Dim teller As Integer = 0 For Each Txtbox As TextBox In Panel1.Controls If Not Txtbox.Text = Nothing Then If IsNumeric(Txtbox.Text) Then getallen(teller) = Txtbox.Text teller += 1 End If End If Next ReDim Preserve getallen(teller - 1)
*EDIT*
Oeps, een paar posts van Joz gemist....![]()
Als het inderdaad in een panel staat, dan is mijn code zo:
CPP Code:
1 2 3 4 5 6 7 Dim nummers As New ArrayList For Each ctrl As Control In Panel1.Controls If TypeOf ctrl Is TextBox Then nummers.Add(ctrl.Text) Next nummers.Sort() For Each item As String In nummers : ListBox1.Items.Add(item) : Next
Ook bij mij word er van onder naar boven gelezen. Op zich komen alle codes op hetzelfde neer, en zie ik als gebruiker geen verschil. Als een textbox leeg is, kun je gewoon ze gewoon de waarde 0 geven als je op button1 klikt (correct me if I'm wrong).
Die 10 blijft tussen de 1 en 2 staan. Hoe haal ik die daar weg? Of iemand moet mij vertellen dat een 10 een kleiner getal is dan 2...![]()
Laatst aangepast door Scandax : 2 april 2012 om 19:56
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Ik moet nu ook gaan. Dank voor de alweer uitstekende hulp.
Thumbs up
Edit:
Ben net verder gegaan. Heb geen panel gebruikt deze keer. Hier mijn code:
Nu controleert hij of textbox1.text numeriek is. Is het ook mogelijk om hem alle textboxen in een keer te laten controleren? Als je alles op deze manier moet gaan uitleggen aan je pc, word je code wel heel erg lang.Code:If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Or TextBox5.Text = "" Or TextBox5.Text = "" Or TextBox6.Text = "" Or TextBox7.Text = "" Or TextBox8.Text = "" Or TextBox9.Text = "" Or TextBox10.Text = "" Then MsgBox("Een of meerdere velden zijn leeg. Voer a.u.b. cijfers (tussen de 0 en 10) in.") Else If Not IsNumeric(TextBox1.Text) Or Not IsNumeric(TextBox2.Text) Or Not IsNumeric(TextBox3.Text) Or Not IsNumeric(TextBox4.Text) Or Not IsNumeric(TextBox5.Text) Or Not IsNumeric(TextBox6.Text) Or Not IsNumeric(TextBox7.Text) Or Not IsNumeric(TextBox8.Text) Or Not IsNumeric(TextBox9.Text) Or Not IsNumeric(TextBox10.Text) Then MsgBox("Alleen getallen kunnen worden gesorteerd. Voer a.u.b. alleen getallen in.", vbInformation) Else Dim getallen As String() = {TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text, TextBox7.Text, TextBox8.Text, TextBox9.Text, TextBox10.Text} Array.Sort(getallen) For Each i As String In getallen ListBox1.Items.Add(i) Next Button1.Enabled = False Button2.Enabled = True End If End If
Edit: Nieuwe code, zie hierbovenPast er alleen niet helemaal in zie ik...
Hiermee zijn ook de meeste problemen opgelost, alleen mag de inhoud van een textbox niet kleiner zijn dan 0 en niet groter zijn dan 10. Hoe doe ik dat???
Laatst aangepast door Scandax : 3 april 2012 om 11:55
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Wat je nu aan het doen is is volgens mij veel te veel werk. We hebben je al eerder voorbeelden gegeven van loops die alle textboxen afgaan... Die loops kan je natuurlijk aanpassen zodat je ze hier handig kan gebruiken...
Ook voor als je textboxen niet in een panel staan, is er al minstens 1 code gegeven. Die kan je dan zelf ook aanpassen.
Wat ik bedoel is: Het is overbodig veel werk om op deze manier alle textboxen langs te gaan. Met een eerder gegeven loop gaat dat veel sneller (het maken v/d code). Als het je niet lukt om die te gebruiken, geef dan aan waar dat verkeert gaat, dan kunnen wij je daarbij helpen.
Succes!
Zal eens kijken naar de loops![]()
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Een loop is inderdaad veel makkelijker. Heb de code gebruikt zoals JoZ1 hem heeft geschreven. De enige problemen waar ik tegenaan loop is dat de 10 tussen de 1 en 2 staat (er wordt alleen gekeken naar het eerste cijfer, denk ik) en de invoer mag niet kleiner zijn dan 0 en niet groter zijn dan 10.
Edit:
Heb ervoor kunnen zorgen dat alleen cijfer tussen -1 en 11 kunnen worden ingevoerd, maar als -0,5 word ingevoerd wordt deze natuurlijk wel gesorteerd. Hoe kan ik in de code zeggen dat alleen getallen tussen de 0,0000001 en 10,0000000000001 mogen?
Klein stukje:
Als ik van die -1 -0,000001 of -0.000001 maak dan doet hij het niet. Zelfde geld voor de 11.Code:CInt(TextBox1.Text) > -1 And CInt(TextBox1.Text) < 11
Laatst aangepast door Scandax : 3 april 2012 om 15:42
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Decimalen hebben geen zin in een integer: http://msdn.microsoft.com/en-us/library/06bkb8w2.aspx.
Dus daar moet je even op letten.
Dan voor de 10 die tussen de 1 en de 2 komt te staan: Als het alleen de 10 is, dan kan je die er ook makkelijk 'handmatig' uit halen. Met bv. een if-statement...
Succes!
Als je decimalen wilt, dan kan je hier even kijken welk datatype je dan het beste kan nemen: http://msdn.microsoft.com/en-us/library/47zceaw7.aspx
Dank, zal hier morgen naar kijken. Met en if statement is dat inderdaad mogelijk, maar dacht dat er misschien een kortere weg was. Aangezien het alleen de 10 betreft, is het ook mogelijk dit handmatig te doen maar ik had gehoopt dat hierbook ergens een kortere weg was.
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Heb Het volgende neergezet:
CInt veranderd naar CDec. Nu werkt het zoals het hoort.Code:If CDec(TextBox1.Text) > -0.000000001 And CInt(TextBox1.Text) < 10.00000000001 Then ...
Weet alleen niet goed hoe ik die 10 weg moet werken? Heb een variable gemaakt voor die textboxen (genaamd 'getallen'), en die worden dan gesorteerd (reeds bekende koek). Hoe zorg ik ervoor dat als een of meerdere getallen 10 zijn, deze niet worden gesorteerd maar later worden toegevoegd?
Vrijdag a.s. is trouwens de deadline.
M.v.gr.,
Scandax
Edit: Als ik 10,05 invul in een van de velden, wordt die wel mee gesorteerd terwijl dat eigenlijk niet zou moeten kunnen (zie de code hierboven).
Laatst aangepast door Scandax : 4 april 2012 om 18:48
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Voor de CInt:
omg, slordig...
En voor die 10:
Ik heb eerst eens zo gedaan:
Die variabele is overbodig... Alleen, hij verwijderd de 10 niet maar voegt wel een 10 toe? Dat vind ik best raar, aangezien het om dezelfde variabele gaat...Code:If TextBox1.Text = ("10") Then Dim tien As Integer = 10 ListBox1.Items.Remove(tien) ListBox1.Items.Add(tien)
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Dank, heb het gevonden. Het lag aan de "-tekentjes. Hieronder de code:
Ook weer slordig van mij...Code:Listbox1.items.remove("10")
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk
Nu, het allerlaatste probleem denk ik: Ik heb iets nodig voor in VB dat in de spreektaal en/of betekend. Lastig om zo uit te leggen, zie de code:
Als ik nu twee keer een 10 in vul, komt een 10 tussen de 1 en 2 te staan en de andere op het einde. Ik heb dus iets nodig wat die Or kan vervangen en en/of betekend... Als je snapt wat ik bedoel :SCode:If TextBox1.Text = ("10") Or TextBox2.Text = ("10") Or TextBox3.Text = ("10") Then ...
Maar moet nu gaan.., dank voor de hulp (again)![]()
Met de vriendelijke groeten van Scandax"Do not worry about your difficulties in Mathematics. I can assure you mine are still greater." - Albert EinsteinTwitter: @TheEijk