listbox index linken aan array kolom

Status
Niet open voor verdere reacties.
Je kunt het op meerdere manieren aanpakken. Je zou bijvoorbeeld je eigen type kunnen maken die de naam van het product en de waarde bijhoudt. (bv. naam = wit brood, waarde = 40)

Code:
structure Product
  public naam as string
  public waarde as integer
end structure

'dim pArr(10) as Product 
'pArr(0).naam = "Wit brood"
'pArr(0).waarde = 40

Als je bijvoorbeeld wilt weten welke waarde er bij 'wit brood' hoort, dan zou je een functie als onderstaande kunnen schrijven:

Code:
private function zoekWaarde(s as string) as integer
  for i as integer = 0 to 10
    if s = pArr(i).naam then zoekWaarde = pArr(i).waarde
  next i
end function

'ongeveer te gebruiken als:
'cal = zoekWaarde(listbox1.selecteditem.ToString()) / 100 * cint(gram)

Op bovenstaande manier zou het eigenlijk geen probleem moeten zijn.
 
Een korte edit op cod:

structure is C, right?
mak er 'type' van, dus zoiets:


Code:
Private Type Product
   naam As String
   waarde As Integer
End Type

V/:thumb:
 
Een korte edit op cod:

structure is C, right?
mak er 'type' van, dus zoiets:


Code:
Private Type Product
   naam As String
   waarde As Integer
End Type

V/:thumb:

Nee, in C(++) is het (typedef) struct. In VB.NET is het structure. :-)
 
Thnx CoD_NL, heb ik ook wat bijgeleerd :D

Edit:
Als je het zo doet moet je wel voor heel die lijst die index nummers ligge type... Is er geen manier om dat te vermijnden?
 
Laatst bewerkt:
Edit:
Als je het zo doet moet je wel voor heel die lijst die index nummers ligge type... Is er geen manier om dat te vermijnden?

Welke index-nummers bedoel je ? Kun je me een voorbeeld geven ?
 
ok, voorlopig kan ik voort en zal deze topic afsluiten, mogelijk zal ik nog wel eens beroep op je moeten doen.

Tnx
 
@ CoD

PHP:
structure Product
  public naam as string
  public waarde as integer
end structure

'dim pArr(10) as Product 
'pArr(0).naam = "Wit brood"
'pArr(0).waarde = 40

Als je dan 100 producten heb, dan moet je
PHP:
pArr(0).naam = "str"
pArr(0).waarde = int
pArr(1).naam = "str"
pArr(1).waarde = int
pArr(2).naam = "str"
pArr(2).waarde = int
doen...

Is er geen manier om het zoals bij een array direct erbei te zetten? = {...}
 
kan ik die array dan laden in een listbox met een lus
zoals bv

For i as integer = 0 to aParr.Getlenght - 1

listbox1.items.add(aParr(naam,waarde))

next
 
ff tussendoor : ik vind dit een reuze forum, ben al op verschillende fora geweest en meestal zijn ze niet zo scheutig op iemand in de startblokken.
 
Tuurlijk kan dat :)
Check mn voorbeeld, de procedure "setProperties", daar heb je zo een loop.

Wss is Ubound(aParr) iets makkelijker dan aParr.Getlenght - 1 ;)

En als je nix van tekst ofzo wil toevoegen en met slechts 1 array werkt, dan kan je dit gebruiken :D (heb je dus zelf geen lus nodig)
listbox1.addrange(aParr)
 
@ CoD
[...]
Is er geen manier om het zoals bij een array direct erbei te zetten? = {...}

Je zou iets als onderstaande kunnen doen:

Code:
  Class Product
        Private naam As String
        Private waarde As Integer

        Public Sub New(ByVal s As String, ByVal i As Integer)
            naam = s
            waarde = i
        End Sub

        Public Function GetNaam() As String
            GetNaam = naam
        End Function

        Public Function GetWaarde() As Integer
            GetWaarde = waarde
        End Function
    End Class

' ...
Dim p() As Product = New Product() { _
           New Product("Wit brood", 40), _
           New Product("Bruin brood", 40), _
           New Product("Aardappel", 20)}

        MessageBox.Show(p(0).GetNaam())
 
Laatst bewerkt:
kan ik die array dan laden in een listbox met een lus
zoals bv

For i as integer = 0 to aParr.Getlenght - 1

listbox1.items.add(aParr(naam,waarde))

next

Het hangt er allemaal een beetje vanaf hoe je het gaat aanpakken. Maar je zou bijvoorbeeld iets als onderstaande kunnen doen:

Code:
private function UpdateListbox(p() as Product, grootte as integer)
  for i as integer = 0 to grootte
    listbox1.items.add(p(i).naam)
  next i
end function
 
Was ff aan het proberen met de structure, maar krijg de array op deze manier niet in de listbox.

Public Class Form1

Structure Product
Public naam As String
Public waarde As Integer
End Structure


Dim pArr(10) As Product



Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
pArr(0).naam = "Wit brood"
pArr(0).waarde = 40
'Vul je listbox met de producten en hun prijs
For x As Integer = LBound(pArr) To UBound(pArr)

ListBoxVoeding.Items.Add(pArr) 'hier klopt iets niet

Next
End Sub
End Class
 
Even wat beter uitgelegd:

Code:
Structure Product
  Public naam As String
  Public waarde As Integer
End Structure

Een product bestaat dus uit een naam en een waarde.

Code:
Dim pArr(10) As Product

Bij bovenstaande regel code maak je dus een array van Producten aan. Elke element van de array heeft dus de eigenschappen 'naam' en 'waarde'.

Code:
ListBoxVoeding.Items.Add(pArr) 'hier klopt iets niet

Hier maak je twee fouten. Ten eerste is pArr() een array van Producten, en heeft hij dus een index als parameter nodig. Ten tweede geef je niet aan welke data je wilt hebben(naam/waarde).
 
@CoD
Krijg je geen rare dingen als je dit doet? Ik bedoel, als je nu bv dit doet
dim myPoint as New Point = (x, y)
Gaat dat dan niet verkeerd?

Code:
        Public Sub New(ByVal s As String, ByVal i As Integer)
            naam = s
            waarde = i
        End Sub
 
Heb besloten om met 2 array's te werken, pfff alle begin is moeilijk zeggen ze.....enkel nog problemen als de listox gesorteerd moet worden...dan komen die waardes niet meer uit, ook resetten vd listboxen lukt niet.
zo ver ben ik
 

Bijlagen

Als je wil dat het gesorteerd staat, kan je dan niet beter eerst die array sorte voordat je hem in die listbox zet?
Ook mss handiger als je een numericUpDown gebruikt voor dat aantal gram, dan moet je dat veld niet ligge beveilige :)
 
eigenlijk wel , heb bij load event system.array.sort(arraynaam) gezet, wat is eigenlijk die numericUpDown ?
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan