Beste leden,
Voor school moet ik een programmaatje schrijven dat cijfers op volgorde zet van groot naar klein. Deze cijfers zullen na het sorteren, weer gegeven moeten worden in een tabel. Ik heb gelezen dat je cijfers kunt sorteren met een array.sort functie. Hieronder mijn begin van de array:
Nu vraag ik me alleen af hoe ik zoiets in een tabel moet laten weergeven? Heb zelf al een aantal kleine dingetjes gedaan in VB.net, maar cijfers sorteren staat niet in dat rijtje.Code:Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Dim getallen As Integer() = {3, 6, 5, 9, 1} // in plaats van deze door mij ingevulde getallen, moet de gebruiker de getallen zelf kunnen invullen Array.Sort(getallen) End Sub End Class
Als extra opdracht bij deze opdracht moet je dit ook met letters doen, maar dat is nu nog niet aan de orde. Als ik dit eenmaal snap, zal ik dat met de letters ook wel snappen
Heb zelf ook al gezocht, maar het probleem ligt 'm bij het weergeven in een tabel.
Bij voorbaat dank voor alle hulp,
Scandax
Laatst aangepast door Scandax : 19 maart 2012 om 15:55 Reden: Spelfout :P
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
Als je het in een listbox wilt zetten dan kan dat zo:
Als je het in een listview wil zetten kan dat zo:Code:Dim getallen As Integer() = {3, 6, 5, 9, 1} Array.Sort(getallen) For Each i As Integer In getallen ListBox1.Items.Add(i) Next
Code:Dim getallen As Integer() = {3, 6, 5, 9, 1} Array.Sort(getallen) For Each i As Integer In getallen ListView1.Items.Add(i) Next
Dan over de letters:
Ieder teken heeft een ASCII code: http://nl.wikipedia.org/wiki/ASCII_%28tekenset%29
Zoals je in die link kan zien, zijn dat eigenlijk gewoon getallen... De ASCII codes van de tekens kan je dus gewoon hetzelfde behandelen als getallen. Let wel op dat het waarschijnlijk niet de bedoeling is dat getallen en letters door elkaar komen......
Ok, ASCII is dus een manier om dat te doen. Visual Basic heeft een (goede) support voor het maken van ASCII codes en het terughalen van de tekens.
Om een ASCII code te maken van een teken gebruik je dit:
Om daarvan dan weer een A te krijgen gebruik je dit:Code:Dim A As Integer = Asc("A")
A moet hierin dan dus een getal bevatten.Code:Dim B As String = Chr(A)
Ik hoop dat je hiermee al een eind komt.
Succes!
MartinJM
Hartelijk dank voor de enorm goede uitleg. Zal morgen eens Proberen, als ik tijd heb. Uiterlijk donderdag zal ik Antwoorden.
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 een enorm drukke week deze week, en heb helaas nog steeds geen tijd gehad om dit te proberen. Morgenmiddag heb ik (zoals het er nu naar uitziet) tijd genoeg om hieraan te werken en zal ik vertellen hoe het gegaan is.
Scandax
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 net geprobeerd en ik snap wat er gedaan word. Nu heb ik 10 textboxen, en de invoer in de textboxen moeten worden gesorteerd. Nu rest mij de enige vraag: Hoe kan ik ervoor zorgen dat die getallen in de textbox worden gesorteerd?
Scandax
Edit: Zie net dat ik 3 posts achter elkaar heb geplaatst, sorry...
Laatst aangepast door Scandax : 23 maart 2012 om 16:02
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
Ok, plaats een panel op je form met daarin het aantal textboxen wat je wilt hebben. In de code die ik heb gemaakt moeten dat er evenveel (of minder) zijn dan het aantal nummers...
In het panel mogen alleen die textboxen zitten, anders kan het fout gaan!!!
De code is dan:
Misschien zie je het meteen, maar ik heb nog een klein beetje meer aangepast: "For i As Integer = 0 To getallen.Length - 1 Step 1" omdat ik daar eerst een error bij kreeg...Code:Dim getallen As Integer() = {3, 6, 5, 9, 1} Array.Sort(getallen) Dim teller As Integer = 0 For i As Integer = 0 To getallen.Length - 1 Step 1 CType(Panel1.Controls(teller), TextBox).Text = getallen(i) teller += 1 Next
Succes!
*EDIT*
Nog een klein stukje code gemaakt:
Als je dit direct onder "teller += 1" zet, dan zou de array volgens mij groter kunnen zijn dan het aantal textboxen.Code:If teller = Panel1.Controls.Count Or teller > Panel1.Controls.Count Then Exit For End If
Succes!![]()
@MartinJM: Je kan controleren of het control een textbox is
CPP Code:
1 2 3 For Each item As Control In Panel.Controls If TypeOf item Is TextBox Then .... Next
Edit:
Kan zelfs nog makkelijker:
CPP Code:
1 2 3 For Each item As TextBox In Panel.Controls ''//code Next
Bij deze line gaat het mis:
Error:CType(Panel1.Controls(teller), TextBox).Text = getallen(i)
Index0 is out of range
Parameter: Index0
@JoZ1
Zal ik zo eens proberenBest handige code.
Laatst aangepast door Scandax : 23 maart 2012 om 16:22
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
Ok, raar, even een paar vraagjes:
Heb je het 2e stukje code ook gebruikt, of heb je alleen het eerste stukje code gebruikt??
Hoeveel textboxen gebruik je nu en hoeveel getallen staan er in de array?
Wat is de waarde van i en wat is de waarde van teller ten tijde van de error?
Niet gezien dat er een 2e stukje code was bijgekomen, teveel gefocust op het sorteren denk ik. Heb 10 textboxen, en ik snap de code niet
Als de waarde van i een cijfer uit een textbox is, dan zijn dat alle cijfers tussen de 0 en de 10 (incl. 0).
En, als ik het eerste stuk code heb gebruikt, hoe gebruik ik dan het 2e stukje?
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
Code:Dim getallen As Integer() = {3, 6, 5, 9, 1, 3} Array.Sort(getallen) Dim teller As Integer = 0 For i As Integer = 0 To getallen.Length - 1 Step 1 CType(Panel1.Controls(teller), TextBox).Text = getallen(i) teller += 1 If teller = Panel1.Controls.Count Or teller > Panel1.Controls.Count Then Exit For End If Next
Error.PNG
Ik krijg een foutmelding. Zie bijlage.
De code die ik heb:
Veel lege plekken, maar denk niet dat de invloed hebben op de "sorteer-code".Code:Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click End Sub Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click Dim getallen As Integer() = {3, 6, 5, 9, 1, 3} Array.Sort(getallen) Dim teller As Integer = 0 For i As Integer = 0 To getallen.Length - 1 Step 1 CType(Panel1.Controls(teller), TextBox).Text = getallen(i) teller += 1 If teller = Panel1.Controls.Count Or teller > Panel1.Controls.Count Then Exit For End If Next End Sub End Class
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
Daar komt het getal 0 uit.
Edit: Als ik het goed begrijp heeft het panel dus geen inhoud .., Heb het Panel in de hele form gedocked (dock in parent container).
Laatst aangepast door Scandax : 23 maart 2012 om 16:50
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 op "Dock panel in parent conatiner" geklikt, maar er blijft 0 uit komen. Niets steekt uit.
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
Screenshot van mijn form zit in de bijlage: error2.jpg
Screenshot van mijn code, mocht het nodig zijn: error3.PNG
Laatst aangepast door Scandax : 23 maart 2012 om 16: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