Hej! Matrisen bör ligga på modulnivån: Behöver du verkligen matrisen? Räcker det inte lika bra med: Det fungerar säkert också!Hur föra vidare värden från en knapp-procedur till en annan?
Jag sitter och jobbar med att skapa ett litet program som fyller en matris med värden från textrutor. Jag bemästrar ännu inte så bra den ädla konsten att programmera i Visual Basic och har stött på ett problem.
PROGRAMBESKRIVNING: Jag har tre textrutor, en där man ska skriva in rad, en för kolumn och en för vilket värde positionen ska ha. Detta ska sedan in i en matris á 4 x 4, alltså om man skriver in rad 2, kolumn 4 och värdet 10, ska siffran 10 hamna på rätt position i en lable i matrisen. Jag har gjort en kontrollarray av lables, lblCArrayRK (0-15), i en Picturebox, där siffrorna ska hamna när man trycker på knappen "Uppdatera" (cmdUppdatera).
Genom att klicka på knappen "Lägg till" (cmdLaggTill), har jag lagt till värdena från textboxarna till en array som jag kallar arrintMatris(1 to 4, 1 to 4). Se nedan:
Sub LaggTill(ByRef intRad As Integer, ByRef intKolumn As Integer, _
ByRef intVarde As Integer, arrintMatris() As Integer)
arrintMatris(intRad, intKolumn) = intVarde
End Sub
PROBLEMET: När jag skriver in t.ex. 2 i textrutan för Rad, 3 för Kolumn och 10 för Värde, så visas det i matrisen om jag har följande kod (se nedan) inne i cmdLaggTill_Click() istället för i cmdUppdatera_Click(). Problemet är då, att så fort jag skriver in nya värden i textrutorna, så skrivs det gamla talet i matrisen över och ersätts med det nya (resten av de icke ifyllda fälten blir 0:or).
Mina variabler lever ju bara inne i sub:en, och jag vet inget sätt att föra vidare dem till Sub cmdUppdatera_Click(), så att jag kan skilja på procedurerna. (Jag har nämligen fått instruktioner om att helst inte använda globala variabler.) Så här ser koden i cmdLaggTill ut just nu:
Private Sub cmdLaggTill_Click()
Dim arrintMatris(1 To 4, 1 To 4) As Integer 'Array
Dim intRad As Integer
Dim intKolumn As Integer
Dim intVarde As Integer
Dim dblMedel As Double
If LasIndata(intRad, intKolumn, intVarde) Then
Call LaggTill(intRad, intKolumn, intVarde, arrintMatris)
End If
Call Uppdatera(intRad, intKolumn, intVarde, arrintMatris())
txtRad.Text = ""
txtKolumn.Text = ""
txtVarde.Text = ""
End Sub
...och såhär ser Sub Uppdatera ut:
Sub Uppdatera(ByVal intRad As Integer, ByVal intKolumn As Integer, ByVal intVarde As Integer, arrintMatris() As Integer)
Dim Pos As Integer
'Pos = (intRad - 1) * 4 + intKolumn - 1
For intRad = 1 To 4
For intKolumn = 1 To 4
lblCArrayRK((intRad - 1) * 4 + intKolumn - 1) = arrintMatris(intRad, intKolumn)
Next intKolumn
Next intRad
End Sub
Är det någon som vet hur jag borde gå till väga för att föra vidare variabler med värden till den andra knappens klick-procedur? Alt. hur gör jag för att inte skriva över de gamla värdena i cmdLaggTill_Click()?
Tacksam för svar,
/ Pia MSv: Hur föra vidare värden från en knapp-procedur till en annan?
Private arrintMatris(1 To 4, 1 To 4) As Integer 'Array
Private Sub cmdLaggTill_Click()
Dim intRad As Integer
Dim intKolumn As Integer
Dim intVarde As Integer
Dim dblMedel As Double
If LasIndata(intRad, intKolumn, intVarde) Then
Call LaggTill(intRad, intKolumn, intVarde, arrintMatris)
End If
Call Uppdatera(intRad, intKolumn, intVarde, arrintMatris())
txtRad.Text = ""
txtKolumn.Text = ""
txtVarde.Text = ""
End Sub
Sub Uppdatera(ByVal intRad As Integer, ByVal intKolumn As Integer, ByVal intVarde As Integer, arrintMatris() As Integer)
Dim Pos As Integer
'Pos = (intRad - 1) * 4 + intKolumn - 1
For intRad = 1 To 4
For intKolumn = 1 To 4
lblCArrayRK((intRad - 1) * 4 + intKolumn - 1) = arrintMatris(intRad, intKolumn)
Next intKolumn
Next intRad
End Sub
Sv: Hur föra vidare värden från en knapp-procedur till en annan?
<code>
Private Sub cmdLaggTill_Click()
Dim lIdx As Long
lIdx = (CLng(Me.txtRad) - 1) * 4 + CLng(Me.txtKolumn) - 1
Me.lblCArrayRK(lIdx).Caption = Me.txtVarde
Me.txtKolumn = ""
Me.txtRad = ""
Me.txtVarde = ""
End Sub
</code>
Om du behöver värdena för uträkningar så har du dem ju i kontrollarrayen.Sv:Hur föra vidare värden från en knapp-procedur till en annan?
Men jag var lite trög och insåg inte att jag hade lagt läggTill i en loop, och därför skrevs värdena över.
Typiskt.
Tack för hjälpen :-)
Mvh,
Pia