Are variable variables still not available on vbnet?
For i = 0 To 10
Me.Button[i].visible = false
Those are called arrays. AFAIK yes, you can create arrays of buttons or other controls.
Except you'd use round instead of square brackets.
As far as your example is concerned the array would be redundant since you can use the Controls collection to do what you want:
For Each b As Button In Me.Controls.OfType(Of Button)() b.Visible = False Next
If necessary you can pick which buttons to make invisible by using a conditional to check for a specicfic string in the name:
If b.Name.Contain("MyFilter") Then
If you must have a collection of just the buttons, I would suggest a List as that gives you more options. you can create one and initialize in the declaration statement:
Dim ButtonList As List(Of Button) = Me.Controls.OfType(Of Button).ToList
that example is different than what I want.
I have 4 labels named labeltroca1, labeltroca2, etc
I want the application to choose which to use based on a variable that is passed into a function:
(how can I do that without IF or CASE ?) [the function also returns true or false in case you find it strange it being boolean]
Function excepc(ByVal ppvp As Double, ByVal apvp As Double, ByVal pqty As Single, ByVal aqty As Single, **ByVal qualp As Single**) As Boolean On Error GoTo MOSTRARERRO ** Dim labeltroca(3) As String** Dim pun As Double Dim aun As Double If IsNumeric(pqty) Then pun = ppvp / pqty Else excepc = False labeltroca**(qualp)**.text = "qty1?" labeltroca**(qualp)**.BackColor = Color.Yellow End If
I tried creating an array and adding (qualp) but it doesn't accept text as a member.
I learned Pascal 20 years ago and it was easy to have variable variables.
should I make a class?
And declare the array of that class instead of string?
found the right option
Had to do it like this to worrk:
Function excepc(ByVal ppvp As Double, ByVal apvp As Double, ByVal pqty As Single, ByVal aqty As Single, ByVal qualp As Single) As Boolean 1: On Error GoTo MOSTRARERRO 2: Dim labeltroca(3) As Label labeltroca(0) = labeltroca1 labeltroca(1) = labeltroca2 labeltroca(2) = labeltroca3 labeltroca(3) = labeltroca4 3: Dim pun As Double 4: Dim aun As Double 5: If IsNumeric(pqty) Then 6: pun = ppvp / pqty 7: Else 8: excepc = False 9: labeltroca(qualp - 1).Text = "qty1?" 10: labeltroca(qualp - 1).BackColor = Color.Yellow 11: End If
See why we always harp on people to show the code. Your solution would have arrived much faster.
While your solution will work for a few controls you can see how unmanageable it would be if you had a hundred labels to fill. A for each loop and a conditional will allow for managing a much larger number:
Dim labeltroca As New List(Of Label) For Each l As Label In Me.Controls.OfType(Of Label)() If l.Name.Contains("labeltroca") Then labeltroca.Add(l) End If Next
Lists are basically dynamic arrays, but with much more options for managing the collection. You would use it exactly the same
labeltroca(qualp - 1).Text = "qty1?" labeltroca(qualp - 1).BackColor = Color.Yellow
Glad you found a solution though. Please remember to mark this solved.