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 Class
Kiitos 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.