Kan man på något vis göra en array med två variabler i en Label? Alltså kunna hänvisa till Label1(i,j). Jag vill göra ett rutnät som skall loopas igenom och det blir krångligt om man har Label1(i), Label2(i) osv när man skall räkna ihop kolumner. Finns det annars något annat smart sätt att skapa loopbara rutnät? Användaren skall själv kunna ange storlek på nätet från 2 X 2 till 30 X 30. Om jag minns rätt så kan man inte ha mer än en dimension på sin array av kontroller. Däremot finns ju andra knep... Det låter som att du ska använda en FlexGrid i stället Säg att lablarna ligger 4 rader X 4 kolumner och med utgångsvärde Visible=False. Hej, Jo jag är kanske envis. Det är problem med den formeln. Labelindex går från 1 till 16 och som loopas igenom när det avgörs vilka som skall synas. När man angett 2X2 skall alltså lablarna med index 4 och 5 inte visas på första raden. Index skall alltså adderas med 2 innan nästa label skall synas och det klarar inte formeln. Nu är jag inte med, varför funkar inte detta? Kan du exemplifiera lite tydligare exakt vad du är ute efter? Jag har en array med labels label(1) till label(16) som är placerade i fyra rader som jag visat ovan. Om jag vill ha 2 rader och 2 kolumner så skall alltså lablarna 1, 2, 5 och 6 som skall vara Visible=True. Väljer användaren 2 rader och 3 kolumner skall lablarna 1,2,3,5,6,7 vara Visible=True. Det är en formel jag är ute efter som klarar av rader och kolumner som variabler som kan göra de rätta lablarna synliga. Jag vet inte hur jag skall förklara det på annat sätt. Ditt senaste exempel löser jag enl denna princip. För ordningen skull ser jag nu att att jag bytt plats på x och y Men... i ursprungsfrågan ville du kunna ha ett rutnät upp till 30x30. Detta skulle innebära att du måste placera ut 900 labels!!! Därför måste det ju vara bättre att ladda in dessa labels dynamiskt, precis som ni varit inne på tidigare i tråden.Rutnät
Sv: Rutnät
Du kan ju helt enkelt räkna ut hur många kontroler som behövs och indexra därefter. Låt oss säga att du skall ha en 3x5 matris, då behöver du 15 kontroller. Låt nu 1-5 motsvara rad 1, 6-10 rad två osv. Matematisk skriver du så här:
label( R * 5 + K )
där R är raden (från 0-2) och K är kolumnen (1-5). Konstanen fem som du multiplicerar med kommer från storleken på din array och måste vara känd (dvs, du vet ju värdet efter att anävndaren angett den ju).
Lycka till!
// JohanSv: Rutnät
Exempel: http://www.veign.com/vrc_codeview.asp?type=app&id=33Sv:Rutnät
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Säg att användaren vill ha 2 X 2 rutor. Då skall lablarna 1, 2, 5, och 6 visas. Väljer användaren 2 X 3 rutor skall lablarna 1, 2, 3, 5, 6 och 7 visas. Jag får inte till en generell formel för detta. Är det enklare att använda NewLabel och placera ut i rader på något vis?Sv: Rutnät
Jag tycker nog detta är ett litet konstigt angreppssätt. Antingen bör du ha dynamisk uplacering av kontroller eller ännu bättre en grid av något slag som föreslagits tidigare i tråden.
Men om du nu envisas...
Jag förutsätter att du vill ha radnummer i intervallet 1-y och kolumn i intervall 1-x. Då gäller fortfarande formeln:
pos = (r - 1) * y + k
dock i ditt fall får du lägga till en mätning på att r <= y såväl som att r <= maximala antalet synliga rader och så likadant på kolumnerna.
// JohanSv:Rutnät
Sv: Rutnät
Sv:Rutnät
Sv: Rutnät
<code>
Private Sub Command1_Click()
Dim x As Long, y As Long, n As Long, i As Long
x = Int(Text1.Text) 'Kolumner som användaren väljer
y = Int(Text2.Text) 'Rader som användaren väljer
n = 1
For i = 1 To x * y 'antal som skall tändas
Label1(n).Visible = True
If i Mod x = 0 Then n = n + (4 - x) ' 4 i varje rad
n = n + 1
Next 'i
End Sub
Private Sub Command2_Click()
'Återställ alla Label:s
Dim i As Long
For i = 1 To 16
Label1(i).Visible = False
Next 'i
End Sub
</code>Sv: Rutnät
x = kolumner y = rader har ingen betydelse här men rätt skall vara rätt
DSSv:Rutnät