Toon posts:

[VB.NET] Kan dynamisch aangemaakte listboxen niet gebruiken*

Pagina: 1
Acties:
  • 169 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben op dit moment bezig met een applicatie in Visual Basic .Net

In form1 maak ik gebruik van een array van listboxen:

Visual Basic .NET:
1
2
Public lstInfo() As ListBox
Public numberListbox as integer = 0


Achter een button worden deze listboxen aangemaakt. Eerst geef ik dmv een Redim aan hoeveel listBoxen het zullen zijn.
Vervolgens maak ik de listboxen aan en plaats deze op form 1. Er zit een check in die controleert of de listbox al is aangemaakt. Wanneer dit het geval is hoeft de listbox niet aangemaakt te worden.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
redim lstInfo(3)

for i = 1 to Ubound(lstInfo)
if numberListbox < i then
    lstInfo(i) = New ListBox
    lstInfo(i).Width = 100
    lstInfo(i).Height = 600
    lstInfo(i).ItemHeight = 15
    me.controls.add(lstInfo(i))
    numberListBox = numberListBox + 1
end if


Dit gaat allemaal goed en ik vul de listboxen in een functie die in een module staat.

Visual Basic .NET:
1
2
3
Public Function vulListboxen(lBox as Integer)
    form1.lstInfo(lBox).items.clear()
    form1.lstInfo(lBox).items.add("TESTVALUE")  


Het probleem:

Dit werkt totdat het voor de tweede keer wordt aangeroepen. Er worden dan geen nieuwe listboxen aangemaakt aangezien deze al aangemaakt zijn.
De functie geeft dan de volgende melding:

code:
1
2
Object reference not set to an instance of an object.
Use the "new" keyword to create an object instance.


Dit is het stuk wat ik niet snap. De listbox is toch al aangemaakt (en toegevoegd aan het form?). Kan iemand mij uitleggen wat hier fout gaat? Ik ben er al een tijd mee bezig maar kom er niet uit.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 17-01 10:57
Als het ASP.net is komt het omdat na de postback hij de objecten niet onthoudt. Deze objecten moet je in de viewstate zetten. Hoe dit precies moet weet ik niet meer (iets met een childnogwat).

[ Voor 77% gewijzigd door Mastermind op 31-07-2006 14:47 ]


Verwijderd

Topicstarter
Daar kom ik nog niet uit.. die viewstate. Het is geen ASP.Net maar gewoon VB.Net. Is er iemand die aan kan geven wat ik fout doe (en/of vergeten ben).

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 17-01 10:57
Waar dient die Redim lstInfo(3) voor in binnen dat if-blok?

Verwijderd

Topicstarter
Mastermind schreef op dinsdag 01 augustus 2006 @ 08:47:
Waar dient die Redim lstInfo(3) voor in binnen dat if-blok?
Dat is een foutje die erin is geslopen met het maken van dit topic. Heb het verwijderd. In de applicatie staat het niet in de code.

  • azuidhof
  • Registratie: April 2005
  • Laatst online: 07-01-2022
Er zijn in ieder geval wat dingen die niet zo lekker lopen:
  • wat doen die curly brackets in VB.NET code, want zo zal het niet eens compilen?
  • je maakt een array met 4 elementen aan maar vervolgens 3 listboxen?
De code draait bij mij gewoon dus ik zie niet wat er fout kan gaan. Heb je iets meer info over wat er nu precies niet lukt en waar

Mijn .NET blog!


Verwijderd

Topicstarter
azuidhof schreef op dinsdag 01 augustus 2006 @ 09:02:
Er zijn in ieder geval wat dingen die niet zo lekker lopen:
  • wat doen die curly brackets in VB.NET code, want zo zal het niet eens compilen?
  • je maakt een array met 4 elementen aan maar vervolgens 3 listboxen?
De code draait bij mij gewoon dus ik zie niet wat er fout kan gaan. Heb je iets meer info over wat er nu precies niet lukt en waar
* curly brackets verwijdert :P ik weet niet waar ik met mijn gedachten zat toen ik de topicstart maakte (heb hem gecheckt en is nu wel goed)
* het probleem is wanneer de code voor de 2e keer wordt aangeroepen (dus nog een keer op de button klikken). dan zouden de listboxes al aangemaakt moeten zijn, maar ik krijg dus de foutmelding.

[ Voor 9% gewijzigd door Verwijderd op 01-08-2006 09:16 ]


  • azuidhof
  • Registratie: April 2005
  • Laatst online: 07-01-2022
Verwijderd schreef op dinsdag 01 augustus 2006 @ 09:06:
[...]


* curly brackets verwijdert :P ik weet niet waar ik met mijn gedachten zat toen ik de topicstart maakte (heb hem gecheckt en is nu wel goed)
* het probleem is wanneer de code voor de 2e keer wordt aangeroepen (dus nog een keer op de button klikken). dan zouden de listboxes al aangemaakt moeten zijn, maar ik krijg dus de foutmelding.
Ik heb in ieder geval nog nooit een curly bracket in VB.NET gebruikt :)
Verder heeft je probleem volgens mij gewoon met mn 2e punt te maken, en roep je een listbox aan in het eerste element (0) van je array, terwijl in de code zoals die hierboven staat er alleen listboxen bestaan in de laatste 3 elementen (1, 2, 3)

Mijn .NET blog!


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 17-01 10:57
Waar dient die "if numberListbox < i then" voor?

Is het een webpagina of en applicatie.

Verwijderd

Topicstarter
Mastermind schreef op dinsdag 01 augustus 2006 @ 09:26:
Waar dient die "if numberListbox < i then" voor?

Is het een webpagina of en applicatie.
Het is een applicatie. Hier wordt bijgehouden of de listbox al een keer is aangemaakt. Wanneer dit nog niet het geval is: aanmaken... wanneer deze listbox wel al is aangemaakt dan hoeft deze niet aangemaakt te worden (dus vanaf de tweede keer dat de functie wordt aangeroepen).

  • empheron
  • Registratie: Mei 2004
  • Laatst online: 09-02 22:39

Public AdminCode As Boolean = False
Public lstInfo() As ListBox
Public numberListbox As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Array.Resize(lstInfo, 3)

For i As Integer = 0 To lstInfo.Length - 1
lstInfo(i) = New ListBox
lstInfo(i).Left = 100 * i
lstInfo(i).Width = 100
lstInfo(i).Height = 600
lstInfo(i).ItemHeight = 15
Me.Controls.Add(lstInfo(i))
numberListbox = numberListbox + 1
Next i
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
lstInfo(0).Items.Clear()
lstInfo(0).Items.Add("TESTVALUE")
lstInfo(1).Items.Clear()
lstInfo(1).Items.Add("TESTVALUE")
lstInfo(2).Items.Clear()
lstInfo(2).Items.Add("TESTVALUE")
End Sub


Probeer dit eens... Functioneert bij mij als een tierelier. Houd er rekening mee dat een array zero-based is.

ps... Hoe krijg ik bij een post de code met behoud van opmaak in de topic, vanuit firefox?

[ Voor 32% gewijzigd door empheron op 01-08-2006 10:00 ]


Verwijderd

Topicstarter
Way2Smart schreef op dinsdag 01 augustus 2006 @ 09:57:

Probeer dit eens... Functioneert bij mij als een tierelier. Houd er rekening mee dat een array zero-based is.

ps... Hoe krijg ik bij een post de code met behoud van opmaak in de topic, vanuit firefox?
ik ga even kijken naar je code.

die ps: Code tags

[ Voor 10% gewijzigd door Verwijderd op 01-08-2006 10:06 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:26
Waarom ga je gewoon niet eens met de debugger aan de slag ?
Een NullRef exception treedt op als je naar een stuk niet gealloceerd geheugen wilt schrijven of accessen. Dus, debug eens, en kijk welke variable er null is en niet null moet / mag zijn.

https://fgheysels.github.io/

Pagina: 1