vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Sonderbarer Fehler 
Autor: Ortech
Datum: 19.01.17 17:38

Grüß euch,
bitte seht euch mal folg. Code Snipsel an:

Public Class AEB
 
 
    Public Structure IOEXBproperties
        Dim safetylevelin As safetyoptions
        Dim safetylevelout As safetyoptions
        Dim autopos As yesno
        Dim manpos As manpos
        Dim AEBIDout As Integer
    End Structure
 
    Public Structure AEBproperties
        Dim ID As Integer
        Dim Inputs() As Boolean
        Dim Outputs() As Boolean
        Dim IO_Anzahl As Integer
        Dim IOEXB() As IOEXBproperties
    End Structure
 
 
    Private AEBXXX(3) As AEBproperties
 
 
 
 
 
    Public Sub New(ByVal icanid As Integer, ByVal IO_Anzahl As Integer, ByVal _
      IOEXBsetting As IOEXBproperties, ByVal control As Control, ByVal x As _
      Integer, ByVal y As Integer)
        Dim iAEBID As Integer
 
        iAEBID = icanid
 
           For i As Integer = 0 To 7
 
            With AEBXXX(iAEBID).IOEXB(i)
 
                .safetylevelin = IOEXBsetting.safetylevelin
                .safetylevelout = IOEXBsetting.safetylevelout
                .autopos = IOEXBsetting.autopos
                .manpos = IOEXBsetting.manpos
                .AEBIDout = IOEXBsetting.AEBIDout
            End With
        Next
 
        zeichneAEBmitIOEXB(iAEBID, IO_Anzahl, control, New Point(x, y))
 
    End Sub
Bei der fett markierten Zeile im Konstruktor steigt das Programm einfach aus. Es wir ddie Form gezeichnet u.s.w. aber wenn man dort hin debugged (F8), steigt das Rrogramm aus.

Was mach ich denn hier bitte falsch??

Alois
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Manfred X
Datum: 19.01.17 20:28

Deine Fehler:

Du gibst nicht an, wie safetylevelin u.a. deklariert ist

Du verwendest Structures in Arrays. Verwende besser Klassen.

Du deklarierst Arrays (z.B. IOEXB) nicht in einer bestimmten Länge.
Die Array-Elemente, auf die Du zugreifen möchtest, existieren nicht.

usw.

Deklariere z.B. die Länge von Arrays im Konstruktor der Klasse,
in der sie enthalten sind. Oder verwende Listen.

Beitrag wurde zuletzt am 19.01.17 um 20:35:09 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Ortech
Datum: 20.01.17 08:13

sorry, hab das ENUM rausgelöscht, wollte nicht unnötigen Code posten, habe dadurch versehentlich zuviel gelöscht

Enum safetyoptions
        not_used
        single_
        dual
        quad
    End Enum
 
Enum yesno
        no
        yes
    End Enum
 
    Enum manpos
        _3_to_5_8_14
        _6_to_8_11_17
        _9_to_11_14_20
        _12_to_14_17_23
        _15_to_17_20__
        _18_to_20_23__
        _21_to_23____
    End Enum
In einer structure kann man keine arrays mit einer bestimmten Länge deklariern.

Du schreibst: "verwende besser....". Für mich heißt das, dass es bessere Wege gibt, um das zu programmieren, aber das heißt für mich auch, dass es nicht zwangsweise falsch ist und zu meinem ominösen Fehler führt. Versteh ich dich da richtig?

Mit LIST kann man nur einen Datentypen haben, soweit ich gelesen hab.

Wie ginge das mit einer Klasse? Hab keine Vorstellung-könntest du mir einen Beispielcode posten?

Beitrag wurde zuletzt am 20.01.17 um 08:23:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Manfred X
Datum: 20.01.17 08:32

Hallo!

Ich weiß nicht, wie gut Du in die OP-Materie bereits eingearbeitet bist.
Structures sind Werttypen, Array-Variable sind stets Verweistypen, auch wenn
die Elemente des Array Werttypen sind.

Ich empfehle insbesondere Anfängern, auf Verweistypen innerhalb einer Structure
zu verzichten, z.B. weil die Zuweisung als Mix von Werten und Referenzen auf
eine Structure-Instanz zu unerwarteten Effekten führen kann.

Falls Du trotzdem wie gehabt weitermachen willst ...
Public Sub New(ByVal icanid As Integer, ByVal IO_Anzahl As Integer, ByVal _
      IOEXBsetting As IOEXBproperties, ByVal control As Control, ByVal x As _
      Integer, ByVal y As Integer)
 
 
        Dim iAEBID As Integer
 
        iAEBID = icanid
 
        Array.Resize(AEBXXX(icanid).IOEXB, 8) 'Deklaration des Array
 
        For i As Integer = 0 To 7
            AEBXXX(iAEBID).IOEXB(i) = IOEXBsetting
        Next i
 
        zeichneAEBmitIOEXB(iAEBID, IO_Anzahl, control, New Point(x, y))
 
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Ortech
Datum: 20.01.17 08:39

Wie du vermutlich vermutest (...) bin ich noch nicht recht fiirm mit OOP , möchte es aber unbedingt verstehen und andwenden können, habe auch schon tuts gelesen, aber trotzdem tu ich mir schwer.
Deine Idee mit einer eigenen Klasse hört sich sehr vernünftig an, abe wie genau ginge das.
Habe grad eine classIO angelegt, aber wie kann ich auf die Members von der classAEB aus zugreifen?
sicher, ich erstelle ein Objekt von der classIO in der classAEB, und dann?
Datenaustausch über properties?
Habe auch noch eine Form, auf der ich mit den Daten was anstelle, in beide Richtungen...
Mir ist der "Knopf" noch nicht aufgegangen...
Könntest du mir ein kleines Beispiel zeigen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Manfred X
Datum: 20.01.17 09:38

Die Member der Structure IOEXProperties sind Werttypen.
Diese Structure kannst Du beibehalten.

Der Austausch von Daten zwischen Instanzen einer Klasse erfolgt durch Properties.
Gewöhnlich kapselt man die Membervariablen (Private) und legt sie durch
Properties offen.

Public Class AEBpropertiesC
 
    Const arrlength As Integer = 8 'Länge der Array-Member
 
    Dim _ID As Integer
 
    Dim _Inputs(arrlength) As Boolean
    Dim _Outputs(arrlength) As Boolean
 
    Dim _IO_Anzahl As Integer
 
    Dim _IOEXB(arrlength) As IOEXBproperties
 
 
    Public Property Inp(ByVal index As Integer) As Boolean
        Get
            Return _Inputs(index)
        End Get
 
        Set(value As Boolean)
           _Inputs(index) = value
        End Set
    End Property
 
 
    Public ReadOnly Property Outp(ByVal index As Integer) As Boolean
        Get
           Return _Outputs(index)
        End Get
    End Property
 
 
    Public Property ioexb(ByVal index As Integer) As IOEXBproperties
        Get
           Return _IOEXB(index)
        End Get
 
        Set(value As IOEXBproperties)
           _IOEXB(index) = value
        End Set
    End Property
 
End Class
Um Instanzen dieser Klasse als Array-Elemente in einer anderen Klasse
verwenden zu können, ist eine Array-Initialisierung zweckmäßig.
'innerhalb der Klasse AEB
 
   Private AEBXXX(3) As AEBpropertiesC 'Es entstehen keine Class-Instanzen 
 
   Private IsInitialized As Boolean
 
   Private Sub Init()
 
        If IsInitialized Then Exit Sub
 
        'Instanzen erstellen
        For i As Integer = 0 To AEBXXX.Length - 1
            AEBXXX(i) = New AEBpropertiesC
        Next i
        IsInitialized = True
   End Sub
 
 
   Public Sub New(ByVal icanid As Integer, ByVal IO_Anzahl As Integer, ByVal _
      IOEXBsetting As IOEXBproperties, ByVal control As Control, ByVal x As _
      Integer, ByVal y As Integer)
 
      Init() 'Instanzen im Array sicher stellen
 
      Dim iAEBID As Integer = icanid
 
      For i As Integer = 0 To 7
         'Structure komplett auf Property zuweisen
         AEBXXX(iAEBID).ioexb(i) = IOEXBsetting 
      Next i  
 
   End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Sonderbarer Fehler 
Autor: Ortech
Datum: 20.01.17 10:19

Danke, verstanden.
Immer wieder ein klasse Forum ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel