Debugger hängt
Verfasst: 16.06.2014 09:45
Hallo,
ich habe ein Programmfenster erstellt, dessen Hauptelement ein Listenfeld (ListView) mit ca. 800 Zeilen ist. Darunter habe ich einige Bildschaltflächen (Imagebuttons) angeordnet, mit deren Hilfe die Einträge des Listenfelds manipuliert werden können. Eine dieser Schaltflächen soll nach dem Anklicken bestimmte Zeilen löschen – in Abhängigkeit davon, ob sie einen bestimmten Text enthalten.
Mein Problem ist jetzt nicht so sehr, daß das Programm das nicht tut, sondern vielmehr, daß der Debugger "hängt" (ein Problem, das ich in Visual Basic nie hatte). Der Ablauf ist in etwa folgender:
1. Das Hauptfenster mit dem Listenfeld wird geöffnet. Das Listenfeld wird mit dem Inhalt einer Textdatei "befüllt".
2. Die Schaltfläche "Fach" des Hauptfensters wird angeklickt.
3. Es öffnet sich ein Unterfenster mit mehreren Checkboxen. Durch Setzen einer oder mehrerer Checkboxen des Unterfensters wird festgelegt, welche Zeilen des Listenfelds gelöscht werden sollen. Nach Betätigen der Schaltfläche "OK" des Unterfensters wird dieses korrekt geschlossen (bis hierhin läuft alles perfekt).
4. Nun sollen alle Zeilen des Listenfelds durchsucht werden, ob sie das Stück Text enthalten, das in 3. per Checkbox festgelegt wurde. Falls nicht, soll die betreffende Listenfeldzeile mittels RemoveGadgetItem gelöscht werden.
Es folgt die Repeat-Until-Ereignisschleife für das Unterfenster mit den Checkboxen. Ich habe sie der Vollständigkeit halber komplett eingefügt, es kommt aber nur auf den Teil nach der Kommentarzeile "3. Zeichenkette aus der Benutzerauswahl bilden" an. Diese Repeat-Until-Schleife ist natürlich Teil der Repeat-Until-Ereignisschleife des Hauptfensters. Der Kode nach "4. Alle Einträge löschen, deren Fach nicht in F enthalten ist" ist die Schleife, die die Zeilen aus dem Listenfeld löschen soll:
3. scheint noch absolut korrekt abgearbeitet zu werden – das Unterfenster wird ja geschlossen, auch die Zeichenkette F wird korrekt gebildet –, aber der Programmfluß scheint nicht mehr bei 4. anzukommen. Jedenfalls wird der Haltepunkt, der sich in der ersten Zeile der Schleife (TxdZl=GetGadgetItemText(#Lf_Li, Zl)) befindet, nicht wie üblich mit einem kleinen Dreieck markiert – der Debugger "hängt" vor 4. fest. Während der gesamten Zeit ist natürlich das Hauptfenster mit dem Listenfeld geöffnet.
Ich hoffe, ich habe es einigermaßen verständlich erklärt. Was kann die Ursache dafür sein, daß der Debugger abbricht?
Vielen Dank
ich habe ein Programmfenster erstellt, dessen Hauptelement ein Listenfeld (ListView) mit ca. 800 Zeilen ist. Darunter habe ich einige Bildschaltflächen (Imagebuttons) angeordnet, mit deren Hilfe die Einträge des Listenfelds manipuliert werden können. Eine dieser Schaltflächen soll nach dem Anklicken bestimmte Zeilen löschen – in Abhängigkeit davon, ob sie einen bestimmten Text enthalten.
Mein Problem ist jetzt nicht so sehr, daß das Programm das nicht tut, sondern vielmehr, daß der Debugger "hängt" (ein Problem, das ich in Visual Basic nie hatte). Der Ablauf ist in etwa folgender:
1. Das Hauptfenster mit dem Listenfeld wird geöffnet. Das Listenfeld wird mit dem Inhalt einer Textdatei "befüllt".
2. Die Schaltfläche "Fach" des Hauptfensters wird angeklickt.
3. Es öffnet sich ein Unterfenster mit mehreren Checkboxen. Durch Setzen einer oder mehrerer Checkboxen des Unterfensters wird festgelegt, welche Zeilen des Listenfelds gelöscht werden sollen. Nach Betätigen der Schaltfläche "OK" des Unterfensters wird dieses korrekt geschlossen (bis hierhin läuft alles perfekt).
4. Nun sollen alle Zeilen des Listenfelds durchsucht werden, ob sie das Stück Text enthalten, das in 3. per Checkbox festgelegt wurde. Falls nicht, soll die betreffende Listenfeldzeile mittels RemoveGadgetItem gelöscht werden.
Es folgt die Repeat-Until-Ereignisschleife für das Unterfenster mit den Checkboxen. Ich habe sie der Vollständigkeit halber komplett eingefügt, es kommt aber nur auf den Teil nach der Kommentarzeile "3. Zeichenkette aus der Benutzerauswahl bilden" an. Diese Repeat-Until-Schleife ist natürlich Teil der Repeat-Until-Ereignisschleife des Hauptfensters. Der Kode nach "4. Alle Einträge löschen, deren Fach nicht in F enthalten ist" ist die Schleife, die die Zeilen aus dem Listenfeld löschen soll:
Code: Alles auswählen
Repeat
Et=WaitWindowEvent()
If Et=#PB_Event_Gadget
Select EventGadget()
Case #Bs_aaw ; alle auswählen
For Zl=0 To AdF
SetGadgetState(#Fe_Fa+Zl+1, #PB_Checkbox_Checked)
Next
Case #Bs_ads ; alle deselektieren
For Zl=0 To AdF
SetGadgetState(#Fe_Fa+Zl+1, #PB_Checkbox_Unchecked)
Next
; 3. Zeichenkette aus der Benutzerauswahl bilden
Case #Sf_F
F=#NULL$
For Zl=0 To AdF
If GetGadgetState(#Fe_Fa+Zl+1)=#PB_Checkbox_Checked ; wenn angehakt,
F+GetGadgetText(#Fe_Fa+Zl+1)+#US$ ; wird der Text der Checkbox
EndIf ; zur Zeichenkette ’F’ hinzugefügt,
Next ; die am Ende alle angehakten Fächer
CloseWindow(#Fe_Fa) ; enthält
EndSelect
EndIf
Until Et=#PB_Event_CloseWindow
; 4. Alle Zeilen löschen, deren Fach nicht in F enthalten ist
For Zl=0 To Ix
TxdZl=GetGadgetItemText(#Lf_Li, Zl)
eF=StringField(TxdZl, 4, #US$) ;
If Not FindString(F, eF)
RemoveGadgetItem(#Lf_Li, Zl)
EndIf
NextIch hoffe, ich habe es einigermaßen verständlich erklärt. Was kann die Ursache dafür sein, daß der Debugger abbricht?
Vielen Dank