Springen naar inhoud


- - - - -
VS 2010

Variabelen In Objectnaam

VS2015

  • Log in a.u.b. om te beantwoorden
Er zijn 5 reacties in dit onderwerp

#1 Puffeltje

Puffeltje

    Senior Developer

  • Leden
  • PipPipPip
  • 117 berichten
    Laatst bezocht 21 jun 2018 21:15
  • LocatieBeverwijk

Geplaatst op 06 maart 2018 - 13:29

In VB6 hadden we indexen beschikbaar voor de vensterobjecten. Bijvoorbeeld: 5 tekstvelden hadden allemaal dezelfde naam maar hadden een aparte unieke index.

In VB.net bestaat dit (helaas) niet meer.
als alternatief wil ik een volgnummer opnemen in de objectnaam, bijvoorbeeld: txtLENGTE0, txtLENGTE1,....txtLENGTE4
met een for-next loop wil ik alle velden doorlopen. Kan ik op een of andere wijze een variabele opnemen in de objectnaam?

For sektie = 0 to 4
   Lengte = txtLENGTE<sektie>.tekst
   ......
   ......
Next

Hier even uit gegaan van 5 elementen maar aantallen kunnen verschillend zijn.

#2 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3592 berichten
    Laatst bezocht 15 sep 2018 11:28
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 06 maart 2018 - 13:53

Je kan de controls op je form/panel/... bevragen en kijken of ze van het type textbox zijn.
Als dat zo is, kun je controleren op naam,etc... en er de gewenste acties aan koppelen.

Visual Basic Code:
For Each c As TextBox In Panel1.Controls.OfType(Of TextBox)()
  If c.Text = String.Empty Then c.Text = "vbib.be"
Next



#3 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1055 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 maart 2018 - 15:59

Bericht bekijkenPuffeltje, op 06 maart 2018 - 13:29, zei:

als alternatief wil ik een volgnummer opnemen in de objectnaam, bijvoorbeeld: txtLENGTE0, txtLENGTE1,....txtLENGTE4
Ik denk dat er betere manieren zijn om je probleem op te lossen, maar goed:

Bericht bekijkenPuffeltje, op 06 maart 2018 - 13:29, zei:

met een for-next loop wil ik alle velden doorlopen. Kan ik op een of andere wijze een variabele opnemen in de objectnaam?
Niet rechtstreeks, maar je kan wel een naam samenstellen en de juiste control vinden en de eigenschappen er uit halen.
Visual Basic Code:
	' Ik ga er van uit dat de naam van de TextBoxen zijn:
	' TextBoxLengte001
	' ...
	' TextBoxLengte005

	' En dat Text een geldige integer bevat

	' Taak: sommeren van alle lengten


	Dim lengte = 0
	For index = 1 To 5
		Dim naam = $"TextBoxLengte{index:000}"
		Dim thisBox = Controls.OfType(Of TextBox).Single(Function(box) box.Name = naam )
		lengte += Integer.Parse(thisBox.Text)
	Next
	Text = $"Totale lengte is {lengte}"
 



#4 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1055 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 06 maart 2018 - 16:04

Bericht bekijkenDirk Andries, op 06 maart 2018 - 15:59, zei:

Visual Basic Code:
' code



En dat kan dan ook volledig met Linq:
Visual Basic Code:

	 Dim totaleLengte = Controls.OfType(Of TextBox).
									Where(Function(box) box.Name.StartsWith("TextBoxLengte")).
									Sum(Function(box) Integer.Parse(box.Text))
	 Text = $"Totale lengte is {totaleLengte}"




#5 Puffeltje

Puffeltje

    Senior Developer

  • Leden
  • PipPipPip
  • 117 berichten
    Laatst bezocht 21 jun 2018 21:15
  • LocatieBeverwijk

Geplaatst op 07 maart 2018 - 00:06

Dirk,

Jouw voorbeeld in post #3 voldoet, ik kan weer verder.

Ik ben overigens wel benieuwd welke betere manier je bedoeld. Zelf heb ik ook wel het gevoel dat de gekozen oplossing mogelijk niet de schoonheidsprijs verdiend.

#6 Dirk Andries

Dirk Andries

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1055 berichten
    Laatst bezocht
  • LocatieGent

Geplaatst op 07 maart 2018 - 18:29

Bericht bekijkenPuffeltje, op 07 maart 2018 - 00:06, zei:

Ik ben overigens wel benieuwd welke betere manier je bedoeld. Zelf heb ik ook wel het gevoel dat de gekozen oplossing mogelijk niet de schoonheidsprijs verdiend.
Bijvoorbeeld:
1. Een object dat je met databinding aan controls koppelt.
2. Idem als 1, maar dan met een usercontrol.
3. Idem als 2, maar dan met een lijst van objecten dat je aan een usercontrol koppelt die elk object aan een child-usercontrol koppelt.

Er staan hier op het forum wel enkele voorbeelden.
Bijvoorbeeld hier eentje van wijlen Benoît.
Ik moet er hier zelf ook hebben, maar die zijn meer voor WPF denk ik.





Ook met taq VS 2010, VS2015 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2010] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)