Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET, VB6: Matriisin koon muuttaminen Visual Basicissä

Viper [19.03.2012 13:32:54]

#

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.

neau33 [19.03.2012 16:24:11]

#

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

Viper [20.03.2012 11:05:13]

#

Kiitos Nea. Vinkkisi kuulosti järkevältä mutta saan ilmoituksen Array already dimensioned. Käytössä siis VB6

neau33 [22.03.2012 10:44:12]

#

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-

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta