I VB6 brukade jag använda index på ex. en label eller textbox. Nä, du har helt rätt i att index inte finns längre i VB.NET. Hej! Hej, Johan! Jag är kanske lite trög så här på Sveriges dag, men jag är inte helt med. Som exempel. Jag placerade mina textboxar direkt på formuläret så jag förstod inte att det var en Panel också inblandad. Tack för hjälpen! Tror nog du kan nog använda bara en form också. Alltså slippaIndex på kontroller
lblTest(1) lblTest(2) o.s.v.
Detta var bra om man hade många likande kontroller i en rad eller column
och ville enkelt komma åt en av dom.
I en annan kod kunde man då skriva
lblTest(x)...... för att ändra just den labeln eller textboxen.
Finns inte den möjligheten i vb.net?
Antar dom gjort det på annat sätt. Någon som kan tipsa om hur.
/PontusSv: Index på kontroller
Hur du ska göra beror på omständigheterna. Du kommer lätt åt alla kontroller som är placerade i en annan kontroll genom .Controls listan, till exempel Form1.Controls.
För att gå igenom alla kontroller som finns i Form1
<code>
For Each ctrl As Control In Form1.Controls
MsgBox(ctrl.Id)
Next
</code>
Har skrivit koden från huvudet men det borde fungera...
Men om du beskriver närmare var du vill göra så kan man ge ett bättre svar.Sv:Index på kontroller
Jag kommer ha flera rader (troligen åtta) med labels
och ungefär sex kolumner. Vill inte använda en datagrid även om det kanske
skulle fungera också.
Sen vill jag på ett enkelt sätt ändra i några rader. T.ex. flytta hela den ena raden
med data upp eller ned och således påverkas alla de andra raderna likadant.
Hade väl varit hyffsat enkelt med hjälp av index 1-2 2-3 o.s.v.
Ska kolla på ditt tips med at ha kontrollerna i en annan kontroll såsom en groupbox.
Tack så länge.Sv: Index på kontroller
här är en funktion som jag använder :
Function SökKontroll(ByVal strId As String, ByVal ctlRoot As Control) As Control
Dim ctlFound As Control
Dim ctlTemp As Control
For Each ctlTemp In ctlRoot.Controls
If ctlTemp.Name.ToUpper = strId.ToUpper Then
Return ctlTemp
End If
ctlFound = SökKontroll(strId, ctlTemp)
If Not ctlFound Is Nothing Then
Return ctlFound
End If
Next
Return Nothing
End Function
Med den kan du döpa dina kontroller till t.ex. Label1, Label2 osv.,
och sedan anropa i en loop :
For intSnurra As Integer = 1 To 4
SökKontroll("Label" & intSnurra, pnlRoot).Text = "Testtext"
Next
Sv: Index på kontroller
Vet inte om du ställer frågan till mig men i.s.f. är det bara vanlig text.
/PontusSv:Index på kontroller
I exemplet skall man uppdatera texten på Label1-Label4. Det är väl inte "Label" som är parametern.Sv: Index på kontroller
Jag har ett antal Label som finns i en panel.
Dessa Label heter för enkelhetens skull bara Label1, Label2, Label3 o.s.v.
Panelen kallar jag pnlRoot.
Här blir texten i Label1 till "Sverige".
SökKontroll("Label" & 1, pnlRoot).Text = "Sverige"
Här ändrar jag texten i Label3 till "Johan".
SökKontroll("Label" & 3, pnlRoot).Text = "Johan"
Hade hellre använt label(1), label(3) o.s.v. men det fungerar visst inte i VB.NET.
Fast ovan tips jag fått fungerar också bra.
Hoppas det klarnade något.
PontusSv:Index på kontroller
Sv: Index på kontroller
lägga textboxarna i en panel.
/Pontus