Probleme mit last[erledigt]
Übersicht

![]() |
skey-zBetreff: Probleme mit last[erledigt] |
![]() Antworten mit Zitat ![]() |
---|---|---|
hy Leutz,
ich sitze momentan an ner kleinen eigenen GUI. Das Problem was ich nun habe, jedes "Fenster" soll ne eigene indexnummer haben, bin dazu alle Types durchgegangen und habe eine indexvariable erhöht und mit Return zurückgegeben, diese habe ich dann für jedes neue Fenster noch einmal um eins erhöht, hat auch wunderbar funktioniert. nun habe ich aber auch nen Close-Button wenn ich dann ein Fenster schließe (irgendeins mittendrin, nicht das letzte), bekomme ich jedoch die gleiche indexnummer, wie das zuletzt erstellte fenster, somit haben 2 Fenster die gleiche indexvariable und werden gleich behandelt. ok, nun habe ich mir gedacht, gehe ich nicht alle Types durch, sondern greife nur auf das letzte zu Code: [AUSKLAPPEN] ;Count_GUI_Elements___________ Function GUI_CountElements() Local index If (win.gui <> Null) Then win.gui = Last gui index = win\index EndIf Return index End Function Soweit so gut, aber index liefert immer "0" zurück Die indexnummer eines neuen fensters initalisiere ich folgendermaßen Code: [AUSKLAPPEN] win\index = GUI_CountElements()+1 Da GUI_CountElements() aber "0" zurückliefert, bekommen alle Fenster die indexnummer "1" kann es ein Bug sein, oder unterliege ich mal wieder einem Logikfehler??? |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
- Zuletzt bearbeitet von skey-z am So, Jan 22, 2006 18:59, insgesamt einmal bearbeitet
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ist der type global?? | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin nicht ganz sicher ob ich Dein Problem wirklich richtig verstanden habe, aber ich denke der Fehler liegt an anderer Stelle. Ich nehme an Du gehst vor dem Aufrufen dieser Funktion alle Einträge mit einer For...Each durch was den Nebeneffekt hat das der Zeiger auf keinen Eintrag mehr zeigt, also Null. Schmeiss einfach die Überprüfung auf Null raus dann ist das Problem behoben ![]() Eine weitere Ursache kann sein das der Zeiger nicht global ist (übergeben wird er ja nicht) und somit auch wieder ins Leere weist ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Obige Funktion macht so ziemlich viel, nur leider nicht zählen. Insofern kann es nichts sinnvolles ausgeben. Am einfachsten würdest du auch nicht durchzählen, sondern eine globale Variable anlegen, die du bei jedem erzeugten GUI element um 1 erhöhst und bei jedem zerstörten um 1 senkst, dass ist beträchtlich schneller.
Aber hier eine funktionierende Version deines Codes: Code: [AUSKLAPPEN] ;Count_GUI_Elements___________ Function GUI_CountElements() local index = 0 for win.gui = each gui index = index + 1 next Return index End Function |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Type ist global in der Hauptdatei und alle Types werden in functionen aufgerufen, also erster Fehlergrund trifft nicht zu
2. weder das entfernen von der überprüfung auf NULL, noch vorheriges setzen auf "First gui" führen zum Erfolg. von meiner logik her, wäre es doch auch eigentlich egal, ob ich die Einträge vorher durchgegangen bin, weil ich doch den zeiger auf den Letzten Eintrag in der liste setze. [edit zu Dremora] bei meiner version soll er auch nicht durchzählen, sondern die index variable des letzten Eintrags in der Liste zurückgeben und für den neuen Eintrag um 1 erhöhen. Das was du da geschrieben hast, hatte ich vorher auch, jedoch überschneiden sich dann variablen[/Edit] |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
skey-z hat Folgendes geschrieben: von meiner logik her, wäre es doch auch eigentlich egal, ob ich die Einträge vorher durchgegangen bin, weil ich doch den zeiger auf den Letzten Eintrag in der liste setze. Ist nicht egal ![]() ![]() Type test
Wenn allerdings das entfernen der Abfrage nichts bringt kann ich aus dem geposteten Code den Fehler auch nicht ersehen End Type For a=0 To 100 t.test=New test Next For t.test=Each test Next If t.test=Null Print "t ist Null" If t.test<>Null Print "t ist kein bisschen Null" WaitKey() End ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
da hat hubsi recht...du musst es erst wieder auf first setzten..oder du lässt diese unsinnige abfagre wech ![]() |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
habs jetzt umgedreht, erst auf last gesetzt, und dann die überprüfung auf nicht null gemacht, und jetzt funzt es, aber die abfrage auf null muss sein, sonst bekomme ich nen fehler, wenn noch kein objekt erzeugt wurde. | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group