German List und Type

Rallig

Member
Licensed User
Longtime User
Hallo,

ich stehe irgendwie total auf dem Schlauch. Bestimmt irgendwas total simples aber ich sehe es gerade nicht, könnt ihr mir da weiterhelfen?

B4X:
Sub Button1_Click
   
   
   XY.Initialize
   XY.xK=10
   XY.yK=20
   
   Schusssammlung.Add(XY)
      
   XY.xK=30
   XY.yK=40
   Schusssammlung.Add(XY)
   
   Dim p As Koordinaten
   p = Schusssammlung.Get(0)
   Msgbox("Button geklickt!",p.xK)
   p = Schusssammlung.Get(1)
   Msgbox("Button geklickt!",p.xK)
End Sub

Die Messageboxen spucken bei mir zweimal 30 aus. Ich denke es müsste ersteinem die 10 und dann die 30 kommen. Wo ist mein Denkfehler?

Unter Globals habe ich stehen:
B4X:
   Type Koordinaten(xK As Int,yK As Int)
   Dim XY As Koordinaten

Gruß
Rallig
 

Jost aus Soest

Active Member
Licensed User
Longtime User
Das Problem liegt hier:

B4X:
XY.Initialize
XY.xK=10
XY.yK=20
Schusssammlung.Add(XY)
   
XY.xK=30
XY.yK=40
Schusssammlung.Add(XY)

Du verwendest zweimal das selbe Objekt, d. h. Schusssammlung enthält danach zwei Verweise auf das gleiche Objekt.
Füge vor XY.xK=30 noch ein XY.Initialize hinzu (es wird ein neues Objekt generiert), dann sollte es klappen.
 

corwin42

Expert
Licensed User
Longtime User
Nein. Initialize erzeugt keine neue Objektinstanz sondern setzt die vorhandene nur zurück. Eine neue Instanz wird üblicherweise nur mit Dim erzeugt.

Also

B4X:
Dim XY as Koordinaten
XY.Initialize
...

Für ein neues Objekt.
 
Top