Hei,
Olen tekemässä Visual Basicillä ohjelmaa jolla on tarkoitus hakea pisteiden koordinaatteja AutoCADistä. Ongelmana on kuitenkin se, että haettavien pisteiden määrä vaihtelee ja koordinaateista koostuvassa matriisissa ei saisi olla ylimääräisiä nollia. Sain jo tehtyä koodin joka laskee miten monella rivillä matriisista on dataa, mutta jos koitan luoda matriisia jonka koko on (rivienmäärä, 1) antaan Visual Basic virheilmoituksen että muuttujan kokoa ei voi määritellä muuttujalla. Kaikki vinkit otetaan vastaan.
Moi Viper!
'VB6 Dim taulukko() As Integer Private Sub Form_Load() Dim rivit As Integer rivit = 10 'esim. ReDim taulukko(rivit - 1, 1) '(0 To 9, 0 To 1) '... End Sub
'VB.NET
Public Class Form1
Dim taulukko(,) As Integer
Private Sub Form1_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Dim rivit As Integer = 10 'esim.
ReDim taulukko(rivit - 1, 1) '(0 To 9, 0 To 1)
'...
End Sub
End ClassKiitos Nea. Vinkkisi kuulosti järkevältä mutta saan ilmoituksen Array already dimensioned. Käytössä siis VB6
Höpö höpö Viper!
Jos määrittelet taulukon VB6:ssa Dim -lauseella tyyliin:
Dim taulukko() As Integer 'tämä lomakkeen generaaliin osioon...
'Public taulukko() As Integer ' tai globaaliin moduuliin...
Private Sub Command1_Click() 'pikku testi...
'niin voit määritellä taulukon ulottuvuudet
'uudelleen ja uudelleen ReDim -lauseella
'ja käyttää koon määrittelyssä muuttujia.
Static muuttuja As Integer
Static muuttuja2 As Integer
muuttuja = muuttuja + 1
muuttuja2 = muuttuja2 + 2
ReDim taulukko(muuttuja, muuttuja2)
MsgBox "ulottuvuudet: (" & UBound(taulukko, 1) & "," & UBound(taulukko, 2) & ")"
End Sub
jos sensijaan määrittelet taulukon ulottuvuudet suoraan Dim -lauseella tyyliin:
Dim taulukko(1,1) As Integer 'esim. 'niin et voi enää myöhemmin määritellä kokoa uudelleen ReDim -lauseella. Private Sub Command1_Click() 'testi... Dim muuttuja As Integer Dim muuttuja2 As Integer muuttuja = 10 'esim. muuttuja2 = 20 ReDim taulukko(muuttuja, muuttuja2) End Sub
tässä vielä eräs vaihtoehto
Dim taulukko As Variant 'taulukon voi määrittää variant tyyppiin
Private Sub Form_Load()
Dim koko1 As Integer
Dim koko2 As Integer
Dim i As Integer
koko1 = 1: koko2 = 10
ReDim taulukko(koko1, 1 To koko2)
For i = 1 To koko2
'jolloin alkioon sijoitettavan datan tyypillä ei ole väliä...
Select Case i 'testi...
Case Is <= 5
taulukko(0, i) = CStr(i) 'i merkkijonona
taulukko(1, i) = i 'i kokonaislukuna
Case Is > 5
taulukko(0, i) = i 'i kokonaislukuna
taulukko(1, i) = CStr(i) 'i merkkijonona
End Select
Next i
End Sub
Private Sub Command1_Click() 'testi...
Dim i As Integer, j As Integer
For i = LBound(taulukko, 2) To UBound(taulukko, 2)
For j = LBound(taulukko, 1) To UBound(taulukko, 1)
Select Case TypeName(taulukko(j, i))
Case "String"
MsgBox TypeName(taulukko(j, i)) & " " & Chr(34) &taulukko(0, i) & Chr(34)
Case "Integer"
MsgBox TypeName(taulukko(j, i)) & " + 10: " & taulukko(1, i) + 10
End Select
Next j
Next i
End Sub-Nea-
Aihe on jo aika vanha, joten et voi enää vastata siihen.