GetGadgetState für ListviewGadget

Anfängerfragen zum Programmieren mit PureBasic.
Phreak
Beiträge: 2
Registriert: 06.01.2010 23:00

GetGadgetState für ListviewGadget

Beitrag von Phreak »

Hi!
Ich habe ein kleines Problem mit dem ListviewGadget bzw. mit dem Auslesen der Werte der Items darin.
Je nach dem, was der Anwender aus der Liste auswählt, sollen einige Angaben dazu gemacht werden.
Das Problem dabei ist: es wird immer nur der Wert des letzten SetGadgetItemData gelesen, auch wenn andere Items ausgewählt werden.
Außerdem würde ich gern wissen, wie ich dafür sorgen kann, dass das Ganze nicht nach einmaliger Anwendung "einfriert" sondern die Auswahl mehrmals getroffen werden kann und der Text entsprechend des neugewählten Items aktualisiert wird.
Hier mein Code: (PS. Ich bin blutiger Anfänger also bitte nicht ganz so dolle schimpfen^^)

Code: Alles auswählen

If OpenWindow(0,100,150,350,400,"Wilkommen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
      Font1 = LoadFont(1,"Arial",16)
      Font2 = LoadFont(2,"Arial",12)
  
     If CreateGadgetList(WindowID(0))
          ButtonGadget(1,140,300,80,20,"Weiter")
          ButtonGadget(2,140,340,80,20,"Beenden")
          TextGadget(3,200,60,60,20,"Kosten :")
           TextGadget(4,300,60,40,20,"Punkte")
           TextGadget(5,200,90,100,20,"Deine Wahl :")
           StringGadget(6,270,60,30,20,"",#PB_String_ReadOnly|#PB_String_BorderLess)    ;Punkte-Kosten
           StringGadget(8,200,110,140,20,"",#PB_String_ReadOnly|#PB_String_BorderLess)  ;Ausgewählten Text anzeigen
           StringGadget(9,300,20,40,20,"110")
               SetGadgetFont(3,FontID(2))
               SetGadgetFont(4,FontID(2))
               SetGadgetFont(5,FontID(2))
               SetGadgetFont(8,FontID(2))
               
         ListViewGadget(7,40,60,140,95)
              AddGadgetItem(7,0,"Text für Item 0")
              AddGadgetItem(7,1,"Text für Item 1")
              AddGadgetItem(7,2,"Text für Item 2")
                  SetGadgetItemData(7,0,a1)
                  SetGadgetItemData(7,1,a2)
                  SetGadgetItemData(7,2,a3)
     
  Repeat
         EventID = WaitWindowEvent()
         
          If EventID = #PB_Event_CloseWindow 
           Quit = 1
          EndIf   
                  
          If EventGadget()=2
              Quit=1
          EndIf
        
           If EventGadget() = 7
             If EventType() = #PB_EventType_LeftClick
                 GetGadgetState(7)
                   If value=a1
                       SetGadgetText(6,"0")
                       SetGadgetText(8,"Text für Wert a1")
                   EndIf
                   If value=a2
                      SetGadgetText(6,"0")
                      SetGadgetText(8,"Text für Wert a2")
                   EndIf
                   If value=a3
                      SetGadgetText(6,"0")
                      SetGadgetText(8,"Text für Wert a3")
                   EndIf
             EndIf
           EndIf
      
  Until Quit=1
  
     EndIf
     
EndIf
End

__________________________________________________
Code-Tags hinzugefügt
07.01.2010
RSBasic
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: GetGadgetState für ListviewGadget

Beitrag von Crawler »

Da gibt es mehrere Sachen. Zum einen fragst du in der Schleife ständig die Variable value ab. Die musss natürlich erst einmal befüllt werden: value=getgadgetstate (7).
Und dann musst du diesen wert mit der Position vergleichen, nicht mit a1, a2, a3, sondern mit 0, 1, 2.
Die Abfrage nach dem Linksklick habe ich auch mal rausgenommen:

Code: Alles auswählen

If OpenWindow(0,100,150,350,400,"Wilkommen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
Font1 = LoadFont(1,"Arial",16)
Font2 = LoadFont(2,"Arial",12)

If CreateGadgetList(WindowID(0))
ButtonGadget(1,140,300,80,20,"Weiter")
ButtonGadget(2,140,340,80,20,"Beenden")
TextGadget(3,200,60,60,20,"Kosten :")
TextGadget(4,300,60,40,20,"Punkte")
TextGadget(5,200,90,100,20,"Deine Wahl :")
StringGadget(6,270,60,30,20,"",#PB_String_ReadOnly|#PB_String_BorderLess) ;Punkte-Kosten
StringGadget(8,200,110,140,20,"",#PB_String_ReadOnly|#PB_String_BorderLess) ;Ausgewählten Text anzeigen
StringGadget(9,300,20,40,20,"110")
SetGadgetFont(3,FontID(2))
SetGadgetFont(4,FontID(2))
SetGadgetFont(5,FontID(2))
SetGadgetFont(8,FontID(2))

ListViewGadget(7,40,60,140,95)
AddGadgetItem(7,0,"Text für Item 0")
AddGadgetItem(7,1,"Text für Item 1")
AddGadgetItem(7,2,"Text für Item 2")
SetGadgetItemData(7,0,a1)
SetGadgetItemData(7,1,a2)
SetGadgetItemData(7,2,a3)

Repeat
EventID = WaitWindowEvent()

If EventID = #PB_Event_CloseWindow
  Quit = 1
EndIf

If EventGadget()=2
  Quit=1
EndIf

If EventGadget() = 7
  value=GetGadgetState(7)
  If value=0
    SetGadgetText(6,"0")
    SetGadgetText(8,"Text für Wert a1")
  EndIf
  If value=1
    SetGadgetText(6,"0")
    SetGadgetText(8,"Text für Wert a2")
  EndIf
  If value=2
    SetGadgetText(6,"0")
    SetGadgetText(8,"Text für Wert a3")
  EndIf
EndIf

Until Quit=1

EndIf

EndIf
End
Die Bereiche, in denen ich was geändert habe, habe ich der besseren lesbarkeit wegen eingerückt.
PB 4.41 | Win7 64bit
Phreak
Beiträge: 2
Registriert: 06.01.2010 23:00

Re: GetGadgetState für ListviewGadget

Beitrag von Phreak »

Vielen Dank für die Hilfe!
Dass value erstmal defíniert werden muss ist ja auch irgendwie logisch :roll:
Die SetgadgetItemData kann ich dann wohl auch weglassen.
Antworten