Ich habe nicht alles genau mitverfolgt, aber ich behaupte mal, dass dir mit einem Array besser geholfen ist, statt mit einer Liste.
Bei Arrays kannst du zu beginn 10 Elemente anlegen, befüllen und bestimmte Elemente anhand ihrer Position eindeutig lokalisieren, lesen und ändern.
Überschreiben von Listenplätzen (?)
Re: Überschreiben von Listenplätzen (?)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Überschreiben von Listenplätzen (?)
Tut mir Leid, aber da gibt es nichts zu verbessern. Listen funktionieren eben genau so und haben einen Grund so zu existieren. Ich habe wie Stargate auch das Gefühl, dass du lieber mit Arrays arbeiten solltest. Denn Listen sind gedacht für eine dynamische Anzahl von Elementen, die man nicht oder selten per Index ansteuert.Re57 hat geschrieben:Vielleicht wird auch einfach mal PureBasic selber so verbessert, daß man Werte von Listenelementen genauso einfach neu belegen kann wie Werte bei gewöhnlichen Variablen, dann wäre dieser Thread ja gar nicht erst entstanden. Heute werde ich wiedermal kaum Zeit haben für PureBasic, aber ich bleibe irgendwie dran.
Im Übrigens ist der Code in deinem Select-Block immer noch redundant. Du machst in jedem Case genau das gleiche. Oder kommt da zukünftig überall was anderes hin?
Re: Überschreiben von Listenplätzen (?)
Hallo,
ich glaube auch das Du den Sinn von Listen nicht ganz verinnerlicht hast.
Für den Anwendungsfall ist ein Array die bessere Lösung.
Wenn ich deine Select Anweisung richtig verstehe möchtest Du je nach Schritt ein Element hinzufügen.
Allerdings ist es dem Addelement egal, welchen Schritt du ausgewählt hast, sondern es fügt immer an der aktuellen (der zuletzt z.b über Selectelement selktierten position) ein Element ein.
Nutzt du ein Array wird über über den nachfolgenden Wert in der Klammer immer exakt die gleiche Position ausgewählt, unabhänig was vorher oder nachher steht.
Ich hoffe die Erklärungen haben etwas weiter geholfen
Gruß
ich glaube auch das Du den Sinn von Listen nicht ganz verinnerlicht hast.
Für den Anwendungsfall ist ein Array die bessere Lösung.
Wenn ich deine Select Anweisung richtig verstehe möchtest Du je nach Schritt ein Element hinzufügen.
Allerdings ist es dem Addelement egal, welchen Schritt du ausgewählt hast, sondern es fügt immer an der aktuellen (der zuletzt z.b über Selectelement selktierten position) ein Element ein.
Nutzt du ein Array wird über über den nachfolgenden Wert in der Klammer immer exakt die gleiche Position ausgewählt, unabhänig was vorher oder nachher steht.
Ich hoffe die Erklärungen haben etwas weiter geholfen
Gruß
Re: Überschreiben von Listenplätzen (?)
Hallo,
anbei habe den Code auch geändert für auf Array's
Ich hoffe das klärt eventuell die Verständnisprobleme
anbei habe den Code auch geändert für auf Array's
Ich hoffe das klärt eventuell die Verständnisprobleme
Code: Alles auswählen
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered
If InitMouse() = 0
MessageRequester("InitMouse fehlgeschlagen", "")
EndIf
If InitSprite() = 0
MessageRequester("InitSprite fehlgeschlagen", "")
EndIf
If InitKeyboard() = 0
MessageRequester("InitKeyboard fehlgeschlagen", "")
EndIf
If OpenWindow(1,0,0,800,412,"",#Flags) = 0
MessageRequester("OpenWindow fehlgeschlagen", "")
EndIf
If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
MessageRequester("OpenWindowedScreen fehlgeschlagen", "")
EndIf
StartDrawing(ScreenOutput())
Box(0,0,800,412,RGB(100,100,220)) ; gr. blaue Farbbox
StopDrawing(): FlipBuffers()
x = 21 ; Startpunkt linke obere Ecke
y = 302 ; Startpunkt linke obere Ecke
b = 22
h = 107 ; 107
For k = 1 To 10 ; wB.
StartDrawing(ScreenOutput())
Box(x,y,b,h,RGB(250,250,250))
StopDrawing()
x = x + 23
Next : FlipBuffers()
;____________________________________________________________________________________________________________________________________________________________________
Dim Beispiel.i(10)
kl1 = 1
kl2 = 1
kl3 = 1
Repeat
ExamineKeyboard()
Event = WaitWindowEvent()
Select Event
Case #PB_Event_LeftClick
kl1 = 1
wmx = WindowMouseX(1)
wmy = WindowMouseY(1)
Case #PB_Event_CloseWindow
schliessen = 1
EndSelect
If (wmx >= 21 And wmx <= 779) And (wmy > 302 And wmy < 408) And kl1 = 1
kl1 = 0
zahl = (wmx+2) / 23 ; steht für die Boxen 1 - 10
schritt = schritt + 1
; Select schritt
; Case 1
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 2
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 3
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 4
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 5
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 6
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 7
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 8
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 9
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; Case 10
; AddElement(Beispiel())
; Beispiel() = zahl : Debug Beispiel()
; EndSelect
beispiel(schritt)=zahl
EndIf
If KeyboardReleased(#PB_Key_W)
kl2 = 1
EndIf
; Taste W steht für Wiedergabe
If KeyboardPushed(#PB_Key_W) And kl2 = 1
kl2 = 0
For i = 1 To schritt
;SelectElement(Beispiel(),i-1)
box = Beispiel(i) : Debug box
Next
EndIf
; Back-Taste erzeugt Schritt zurück
If KeyboardReleased(#PB_Key_Back)
kl3 = 1
EndIf
If KeyboardPushed(#PB_Key_Back) And kl3 = 1
kl3 = 0
schritt = schritt - 1
If schritt < 1
schritt = 1
EndIf
EndIf
Until schliessen = 1 Or KeyboardPushed(#PB_Key_F1)
End
Re: Überschreiben von Listenplätzen (?)
Mittlerweile läuft mein Programm mit einem Array und die Redundanz ist auch weg. Danke nochmals, das war jetzt echt ein Schritt nach vorn