Hej Låt Text2 vara en enkel TextBox Ej kontrollarray. Hej och tack för svaret. Nää varför skall du ha 12 TextBoxar gör så här lägg dit en lång Text3 Oki på det men som du skrivit nu så har du alltså 40 Label :s Jag har en matriss med 40 labels i en array, som slumpgenerator 40 nummer = måltips och 35 nummer = lotto Oki nu förstår jag exakt. Lösning kommer på denna kanal. <code> tack för det sa telia ok testar kollar om det fungerar har du någon email ???? Som vanligt det blev snabbt och fel när man inte provkör.Sista delen skall vara så här. Tack Här är en enkel sorteringsrutin. Men vilken parameter skall användas för text2.text boxarna ???? = tmp eller ???? Så här blev lösningen på just den delen av hans problem.Onödigt att blanda inSortering
Är det någon som kan hjälpa till tro. Jag vill ha slumpade nummer att komma i fallande ordning i text rutor se bifogad kod:
Har en array label1(1) till label1(40)
och text2(i) till text2(i) från 7 - 12 text rutor vilket som är valt i chekbox.
Sub Lotto()
Dim LottoArray(40) As Long, i As Long, num As Long
'************************ slumpar nummer
'********** Numsize = 7, 8, 9, 10, 11, 12 = lotto
i = 1
Do Until i > numsize
num = Int(Rnd * 40) + 1
If LottoArray(num) = 0 Then
LottoArray(num) = num
Label1(num).BackColor = vbRed
Label1(num).ForeColor = vbWhite
Label1(num).FontBold = True
Label1(num).FontSize = 12
Label1(num).Caption = num
' HÄR VILL JAG I DESSA TEXT2(I).TEXT RUTORNA HA FALLANDE ORDNING TEX:
' FRÅN VÄNSTER TILL HÖGER 2, 8, 14, OSV TILL NUMSIZE vilket som är valt i checkbox
'
Text2(i).Text = num
i = i + 1
End If
Loop
END SUBSv: Sortering
' HÄR VILL JAG I DESSA TEXT2(I).TEXT RUTORNA HA FALLANDE ORDNING TEX:
' FRÅN VÄNSTER TILL HÖGER 2, 8, 14, OSV TILL NUMSIZE
' Text2(i).Text = num
i = i + 1
End If
Loop
For i = 1 To 40
If LottoArray(i) <> 0 Then _
Text2.Text = Text2.Text & Str$(i) & ","
Next 'i
END SUBSv: Sortering
Men måste jag ta bort alla controll arryerna och göra 12 textboxar istället.
Nu får jag error nr:461 Datameber not foundSv: Sortering
och ändra koden så här så förstår du vad jag menar.
Varför duger det inte med en Label ? Skulle du skriva i Text2 boxarna ?
<code>
' HÄR VILL JAG I DESSA TEXT2(I).TEXT RUTORNA HA FALLANDE ORDNING TEX:
' FRÅN VÄNSTER TILL HÖGER 2, 8, 14, OSV TILL NUMSIZE
' Text2(i).Text = num
i = i + 1
End If
Loop
For i = 1 To 40
If LottoArray(i) <> 0 Then _
Text3.Text = Text3.Text & Str$(i) & ","
Next 'i
END SUB
</code>
Obs Text2 är remmadSv: Sortering
och 40 TextBoxar (Text2(40).Text ! ? , är det så ?
Alltså Hur många Label1:s har du och hur många Text2 har du ?.Sv: Sortering
text boxarna ligger för sig med text2(i) = 12 st
vilket motsvarar detta
lotto 7 nummer = text2(i) ' 7 textboxar
lotto 8 nummer = text2(i) ' 8 textboxar
osv till 12 nummer
om jag väljer att skriva egna nummer och har valt lotto 7 skall jag kunna skriva i dem.
annars om jag slumpar skall de skrivas som tidigare i fallande ordningSv: Sortering
Förutsätter att du Label1(0) och Text2(0) som första .!?
Dom skall vara med !, annars får du en massa onödiga problem.Sv: Sortering
Sub Lotto()
'Principlösning som kanske behöver småjusteras
Dim LottoArray(40) As String, i As Long, num As Long
'************************ slumpar nummer
'********** Numsize = 7, 8, 9, 10, 11, 12 och 40
For i = 0 To 39
num = Int(Rnd * 40) + 1
If LottoArray(num) = "" Then
LottoArray(num) = "X"
Label1(num).BackColor = vbRed
Label1(num).ForeColor = vbWhite
'Det här verkar onödigt att göra 40 ggr,
'kan du inte göra detta i designläge
Label1(num).FontBold = True
Label1(num).FontSize = 12
'*****************************
Label1(num).Caption = num
End If
Next 'i
For i = 0 To 39
If LottoArray(i) <> "X" Then _
Text(2).Text = CStr(i)
Next 'i
End Sub
</code>Sv: Sortering
isåfall är min danlenn@telia.comSv: Sortering
<code>
Dim n As Long
For i = 0 To 39
If LottoArray(i) <> "X" Then
Text2(n).Text = CStr(i)
n = n+ 1
End If
Next 'i
End Sub
</code>Sv: Sortering
Nu måste jag döpa om hela controll arryaen till 0 - 39 istället för 1 - 40
eller hur.Sv: Sortering
Jag antar att LottoArray är en Array med index som sträcker sig från 0 till 39 och innehåller färdiga slumtal (eller vilka andra värden som helst).
<code>
Dim i As Long, j As Long, Tmp As Long '(Du kan ta bort 'i' eftersom du har den ovanför, den är med för att göra koden fullständig)
For i = 0 to numsize - 2 'Gå från 0 till NÄST sista elementet
For j = i + 1 To numsize - 1 'Gå från i + 1 till sista elementet
If LottoArray(j) < LottoArray(i) Then 'Sortera med mindre först
Tmp = LottoArray(i)
LottoArray(i) = LottoArray(j)
LottoArray(j) = Tmp
End If
Next j
Next i
</code>
Den här metoden tror jag kallas quicksort. Det finns snabbare metoder (ex. Bubble sort), fast de har betydligt med komplicerad kod.
Ett annat sätt att byta väden på två nummer-variabler utan Tmp-variabel är enligt följande:
<code>
LottoArray(i) = LottoArray(i) - LottoArray(j) 'STÖRRE - MINDRE = SKILLNAD
LottoArray(j) = LottoArray(j) + LottoArray(i) 'MINDRE + SKILLNAD = STÖRRE
LottoArray(i) = LottoArray(j) - LottoArray(i) 'STÖRRE - SKILLNAD = MINDRE
</code>
(hmm.. 'j' verkar se ut som 'i' med den där text-fonten)Sv: Sortering ( MizardX )
Vilka består i från 7 till 12 st beronde på vald ckeckboxSv: Sortering ( MizardX )
en sorteringsalgoritm här.Man kan sortera en Array genom att använda dess Index
<code>
Sub Lotto7()
Dim i As Long, num As Long, n As Long
Dim LottoArray(35) As Boolean
'************************ slumpar nummer
i = 1
Do Until i > numsize '7
num = Int(Rnd * 35) + 1
If LottoArray(num) = False Then
LottoArray(num) = True
Label1(num).BackColor = vbRed
Label1(num).ForeColor = vbWhite
Label1(num).FontBold = True
Label1(num).FontSize = 12
Label1(num).Caption = num
i = i + 1
End If
Loop
n = 1
For i = 1 To 35
If LottoArray(i) <> 0 Then
Text2(n).Text = CStr(i)
n = n + 1
End If
Next 'i
End Sub
</code>