Wątek przeniesiony 2021-09-16 10:14 z Inne języki programowania przez cerrato.

VB.NET i zagnieżdżone struktury danych - prośba o pomoc

0

Szanowni koledzy, próbuję powiązać moje urządzenie arduino z aplikacją Visual Basic. Natknąłem się na problem po stronie VBA.

Mianowicie: urządzenie wysyła zestaw makr do komputera. Struktura danych do zapamiętania jest nastepująca:
są trzy zestawy makr
w każdym jest 100 makr
każde składa się z 12 kroków
każdy krok składa się z 4 elementów (kody ascii przycisków)

odwołanie się do danego kodu wyglądałoby tak: zestawmakr(numerZestawu).makro(numer).makroStep(numerKroku).przycisk1 =.......
Po stronie adruino, nie mam problemu.

w Visual basicu utworzyłem strukturę:


 Public Structure makroStepStruct
        Dim modifier1 As Byte
        Dim modifier2 As Byte
        Dim modifier3 As Byte
        Dim key As Byte
    End Structure

    Public Structure makroStruct
        Dim makroName As String
        Dim makroStep() As makroStepStruct
    End Structure

    Public Structure makroSetStruct
        Dim makro() As makroStruct
    End Structure
 
    Dim makroSet(3) As makroSetStruct

Próbowałem zagnieżdżać struktury jedna w drugiej, itp. W programie jednak ciągle pojawia się błąd: Message = "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu." NullReferenceException
Szukam odpowiedzi w różnych miejscach i widzę, że powinienem jakoś wypełnić tę strukturę. Choćby tu:
https://stackoverflow.com/questions/32394411/nullreferenceexception-was-unhandled-vb-net-structure-with-array

Ale jednak nie umiem tego ugryźć... a już 3.41 w nocy...
Pozdrawiam :-) Może ktoś pomoże :-)

0

Taki błąd pojawia się gdy używasz obiektu a nie deklarujesz. To nie ten kod.

0

To jest jasne. Podałem moje próby deklaracji. Podejrzewam, że czegoś brakuje w deklaracji - Jakiegoś zainicjowania obiektu.tutaj wiedzy mi brakuje.
Kod, który generuje wyjątek może np być taki:

makroSet(0).makro(1).makroStep(12).modifier1 = 45
0

No to proszę: kod poniższy zaraz na początku form load

'''
makroSet(0).makro(1).makroStep(1).modifier1 = 45
'''

Nic więcej nie ma. Natomiast nie ma także żadnego konstruktora obiektu. Ups 😊 ale nie wiem jak utworzyć.

A o co do struktur. Jak ostatnio 12 lat temu ich używałem to nikt się nie czepiał :-)

0

Podpowiedz proszę jak utworzyć obiekt o takiej strukturze. A ja w międzyczasie poczytam o klasach

0
Public Class makroStepStruct
    Public modifier1 As Byte
    Public modifier2 As Byte
    Public modifier3 As Byte
    Public key As Byte
End Class

Public Class makroStruct
    Public makroName As String
    Public makroStep As New ArrayList()
End Class


Public Class makroSetStruct
    Public makro As New ArrayList()
End Class

    Sub Main()
        Dim m As New makroSetStruct()
        m.makro.Add(New makroStruct())

        Dim makro As makroStruct = m.makro(0)
        makro.makroName = "testowe makro"
        makro.makroStep.Add(New makroStepStruct With {.modifier1 = 2, .modifier2 = 3, .modifier3 = 1, .key = 0})
    End Sub

0

Zatem słowo kluczowe brzmiało arraylist. Bardzo dziękuję. Przystępuję do testów.

0

Nie. Można było użyć klasycznej tablicy, kolekcji (tej starej - z.Generic), Listy, ale ArrayList jest wygodniejsze - nie trzeba nic robić. Ale za to nie "pilnuje" typu elementów :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1