Hej alla Pellesoftare <b>har försökt att få programmet att räkna ut totalt antal rader som min ram består av ex 5 hel och 4 halvgarderingar = 3888 rader</b> Hej Per och tack för ditt svar Vad jag förstod av ovanstående svar så har du alltså flera TextBoxar som markeras med ett tecken när du klickar i respektive ruta. Hej Christian Okej, Tack Christian för ditt angagemang. Om rutorna heter Tack PerSlumpa
Har en stryktipsram, har försökt att få programmet att räkna ut totalt antal rader
som min ram består av ex 5 hel och 4 halvgarderingar = 3888 rader men det vill sig inte
det verkar som X:et är problemet, antar jag måste göra om krysset till en siffra.
Har samma stryktipsram med hel och halvgarderade skall nu slumpa fram mina tipsrader
efter att jag fått frågan hur många rader jag vill tippa utifrån de totala raderna. Hur går jag till väga?
Har försökt på olika sätt att få det att fungera men icke. Ger snart upp.
Det är kanske mycket begärt men hoppas få lite hjälp på vägen.Sv: Slumpa
3^(antal helgarderingar) * 2^(antal halvgarderingar)
Ex. 3^5 * 2^4 = 243 * 16 = 3888Sv: Slumpa
Skall försöka få ihop det med alla textboxar.
Har en textbox för varje tipstecken som markeras när jag klickar i dom så det är några stycken.
För mig är det klurigt men försöker man inte så lär man sig inget heller.
Åter igen tackSv: Slumpa
Om du ger alla TextBoxar samma namn (exempelvis txtRuta) och sedan Indexerar dom med värdena 0 , 1 , 2 , .. så kan du sedan använda en For-slinga för att gå igenom alla TextBoxar väldigt smidigt.
Dim iCurBox As Integer
For iCurBox = 0 To <här får du skriva antal textboxar du har, minus ett>
If Len(Trim(txtRuta(i).Text)) = 0 Then
'det står något i textrutan, och det är inget mellanrum
'kan göra ytterligare kontroller för att se om det är 1,X,2 om så önskas
'
'du kan helt enkelt utföra den kod du vill göra när du vet att något står i rutan
End If
Next
Hoppas detta är vad du söker, annars är det bara att hojta till!
mvh
ChristianSv: Slumpa
Helt riktigt har en textbox för vart tecken så det är säkert vad jag är ute efter.
Har inte hållit på så länge så det blir en enkla vägen,
men som kanske inte alltid är den bästa.
Så jag har inte döpt om textboxarna utan det har blivit i turordning,
Text1.Text - Text39.Text. Har kanske varit enklare om jag använt mig av "arry:s",
Skall sätt mig och testa. Kan jag inte få det att fungera får jag väl maila hela projektet
så du får titta på det. Om det går för sig.
Skulle få hjälp av en gammal arbetskamrat som sade sig programera i VB
men det var nog mest prat för han har varken visat sig eller hört av sig.
StenSv: Slumpa
är inte riktigt med på din nivå av kunskap, så detta kanske låter lite väl förskole-aktigt, men jag hoppas du har överseende för det.
Eftersom du har textboxarna med namn Text1, Text2, Text3 osv fram till Text39, så blir det en väldigt lång kod för att kontrollera om det står något i en textbox. Jag vet inte hur du utför kontrollen nu, men det skulle innebära en If-sats (alternativt en Select Case-sats) för varje textbox i stil med:
<code>
If Text1.Text = "" Then
</code>
If Text2.Text = "" Then
...
If Text39.Text = "" Then
</code>
Det blir minst 39 rader kod för att kontrollera vad som innehåller ett tecken och inte.
För att lättast "gå igenom" (loopa) alla de textrutor du har, bör du således börja döpa om dessa 39 textboxar (genom att ändra Name-egenskapen) till exempelvis txtRuta, och egenskapen "Index" sätts till 0, följt av att Text2 då kommer heta txtRuta också, men med Index-värdet 1.
Text1 = txtRuta(0)
Text2 = txtRuta(1)
...
Text39 = txtRuta(38)
Vad du kan göra för att gå igenom alla de textboxar du har enligt ovan, krävs enbart några få rader kod. Är du familjär med FOR-slingor? Med dessa kan du upprepa kod ett visst antal gånger (och du kan när som helst avsluta upprepningen med en rad kod om så önskas i framtiden).
<code>
For i = 0 To 38
Next
</code>
Det är grundkoden för en loop, som utförs 39 gånger (0=1gången, 1=2gången, ..., 38=39 gången).
i är en variabel, som naturligtvis kan heta vad som än är tillåtet för en variabel, och i detta fallet kan den dimensioneras till Integer (dvs, du talar om för VB att det är ett heltal vi sysslar med, om vi inte gör det så tolkar VB det som en variabel av datatypen Variant vilket kräver mest minne.. Det är rätt små "minnes-bytes" i detta fall, men många bäckar små..)
Jag är inte riktigt säker på om du vill kolla vad det finns för tecken i textboxen, eller om du bara vill kolla om det överhuvud taget står något där. Därför följer två exempel du kan använda:
För att kontrollera om det står något alls:
<code>
Dim i As Integer
For i = 0 to 38
If Len(Trim(txtRuta(i).Text)) <> 0 Then
'kod att utföra när en ruta innehåller något tecken (filtrerar bort eventuella mellanslag)
End If
Next
</code>
För att kontrollera om det står något, och vad det står i rutan:
<code>
Dim i As Integer
For i = 0 to 38
If Trim(txtRuta(i).Text) = "1" Then
'kod att utföra när en ruta innehåller tecken 1
ElseIf Trim(txtRuta(i).Text) = "X" Then
'kod att utföra när en ruta innehåller tecken X
ElseIf Trim(txtRuta(i).Text) = "2" Then
'kod att utföra när en ruta innehåller tecken 2
End If
Next
</code>
Notera att i senaste exemplet står 1,X och 2 inom citationstecken. Detta är för att textboxen tolkar sitt innehåll som en sträng, även om det bara står en siffra där, vill man ändå räkna det som en siffra kan man byta ut exempelvis villkoret mot: Val(Trim(txtRuta(i).Text)) = 1
Val() omdimensionerar variabeln automatiskt till en passande datatyp för tal.
Förklaringar av funktioner som används:
Trim() tar bort mellanslag (space) före och efter den sträng man anger inom parenteserna.
LTrim() tar bort mellanslagen före, och enbart före, den angivna strängen.
RTrim() tar således bort enbart de mellanslag efter texten.
Len() returnerar längden, dvs antal tecken, på det angivna argumentet.
Vad som egentligen händer i For-satsen med i, är att för varje gång som koden utförs så ökar i med ett steg. Således kommer i vara 0 första gången, och 1 andra gången, tredje gången koden körs är i = 2. Här ser vi snabbt ett samband mellan i och textboxarna vi har döpt till txtRuta, deras Index motsvarar värdet på i, smart va? ;o)
På detta sättet kommer du lätt igenom de 39 textboxar du har.
Jag vet inte hur man definierar något som en helgardering eller halvgardering, då jag inte spelar något sådant själv.
Jag svarar gärna mer om du har frågor eller inte förstår..
mvh
ChristianSv: Slumpa
Hoppas du ursäktar att jag inte har svarat på inlägget tidigare.
Har under några dagar försökt att para ihop dina rader kod med den jag fick av Per
för att få till automatik på så vis att när jag skriver in respektive tipstecken i texboxarna
skall antal rader automatiskt komma upp i en textbox (txtAntRader).
Ex: I match ett vill jag ha en halvgardering 1 - 2 så när jag skriver in ettan i txtBox(0) skall det i txtAntRader komma upp en etta, när jag skriver in tvåan i txtBox(2) skall txtAntRader ändras till 2,
match 2 är säker ingen ändring i txtAntrader. Match tre vill jag helgardera så när jag har skrivit in respektive tipstecken i textboxarna skall det i txtAntrader stå en sexa (2*3=6) o.s.v
Men som vanligt klarar jag inte av ekvationen. Så nu har jag funderat på att lägga ned projektet
och köpa kaniner, dom är ju redan programmerade.
Tro det eller ej men jag har faktiskt gjort program som fungerar.
Mvh
StenSv: Slumpa
box1 box2 box3
box4 box5 box6
box7 box8 box9
...
och de har en egenskap 'ifylld' som är 1 om man har skrivit in ett tecken, 0 om man inte har skrivit in något, så blir antalet ifyllda rutor i rad1 (box1.ifylld + box2.ifylld + box3.ifylld) och motsvarande på de andra raderna.
Antalet möjliga tipsrader utifrån alla de rutor man fyllt i blir
(box1.ifylld + box2.ifylld + box3.ifylld) * (box4.ifylld + box5.ifylld + box6.ifylld) * ... * (box37.ifylld + box38.ifylld + box39.ifylld)
Observera att man här måste ha fyllt i minst en ruta på varje rad för att få något annat än 0.
Du förstår kanske varför en annan namngivning hade varit bra...?
Hade rutorna hetat box[1][1], box[1][2], box[1][3], box[2][1], box[2][2], box[3][3], ... hade man kunnat använda ett par loopar:
<code>
TotaltAntalKombinationer = 1
For rad = 1 To 13
AntalIfylldaDennaRad = 0
For kol = 1 To 3
AntalIfylldaDennaRad += box[rad][kol].ifylld
Next
TotaltAntalKombinationer *= AntalIfylldaDennaRad
Next
' Totalt antal kombinationer finns förstås i TotaltAntalKombinationer
</code>
Edit:
Ett exempel med kryssrutor gjort i JavaScript:
http://w1.370.telia.com/~u37026148/test/tipsrad.htmSv: Slumpa
Du får mig att fortsätta med galenskaperna.
Med de råd och tips jag får går det ju inte att lägga av.
Blir till att åter slita sitt hår. Synd om frisören.
Var inne på den länk hänvisade till, det är så hade jag tänkt mig.
Tack Per. Jag åter kommer, var så säker.
Sten