getlist [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Tirili, Fehler gefunden

Code: Alles auswählen

PROCEDURE main()
          LOCAL getlist := {}
          LOCAL nAuswahl

          MEMVAR oBild
          MEMVAR oMaske1, oMaske2
          
          PRIVATE oBild   := bildschirm():new()
          PRIVATE oMaske1 := maske1():new()
          PRIVATE oMaske2 := maske2():new()

          PRIVATE feld1
          PRIVATE feld2
          PRIVATE feld3

          WINIT()
          SEt DATE GERMAN
          SET CONSOLE OFF
          SET CONFIRM ON
          set CURSOR ON

          set wrap on
          set message TO MAXROW() Center
          DO WHILE .T.
             clear gets
             nAuswahl := oBild:MenueHorizontal(nAuswahl,"")
             DO CASE
                CASE nAuswahl = 1
                     oMaske1:init()
                     oMaske1:felder(getlist)
                     READ
                     nAuswahl := 8

                CASE nAuswahl = 2
                CASE nAuswahl = 3
                     oMaske1:felder(getlist)
                     READ

                CASE nAuswahl = 4
                CASE nAuswahl = 5
                CASE nAuswahl = 6
                CASE nAuswahl = 7
                CASE nAuswahl = 8
                     oMaske1:felder(getlist)

                CASE nAuswahl = 9
                     EXIT

             ENDCASE
          ENDDO .T.
          RETURN
********************************************************************************
FUNCTION eingabe2()
         LOCAL nAuswahl
         LOCAL getlist := {}

         MEMVAR oBild
         MEMVAR oMaske2

         WOPEN(5,1,20,60,.T.)
         WBOX()
         WCENTER(.T.)
         DO WHILE .T.
            ReadKill()
            nAuswahl := oBild:MenueHorizontal(nAuswahl,"")
            DO CASE
               CASE nAuswahl = 1
                    oMaske2:init()
                    oMaske2:felder(getlist)
                    READ
                    nAuswahl := 8

               CASE nAuswahl = 2

               CASE nAuswahl = 3
                    oMaske2:felder(getlist)
                    READ
               CASE nAuswahl = 4
               CASE nAuswahl = 5
               CASE nAuswahl = 6
               CASE nAuswahl = 7
               CASE nAuswahl = 8
                    oMaske2:felder(getlist)

               CASE nAuswahl = 9
                    EXIT
            ENDCASE
         ENDDO .T.
         WCLOSE()
         RETURN(.T.)
********************************************************************************
CLASS maske1
      EXPORTED:
      VAR feld1,;
          feld2,;
          feld3
      METHOD init
      METHOD felder
      METHOD pruef
ENDCLASS
********************************************************************************
METHOD maske1:init()
       ::feld1 := SPACE(5)
       ::feld2 := SPACE(5)
       ::feld3 := SPACE(5)
RETURN
********************************************************************************
METHOD maske1:felder(getlist)
       @  5, 1 GET ::feld1 PICTURE "XXXXX";
               VALID ::pruef()
       @  6, 1 GET ::feld2 PICTURE "XXXXX"
       @  7, 1 GET ::feld3 PICTURE "XXXXX"
RETURN self
********************************************************************************
METHOD maske1:pruef()
       MEMVAR oMaske2

       eingabe2()
RETURN(.T.)
********************************************************************************
CLASS maske2
      EXPORTED:
      VAR feld4,;
          feld5,;
          feld6
      METHOD init
      METHOD felder
ENDCLASS
********************************************************************************
METHOD maske2:init()
       ::feld4 := SPACE(5)
       ::feld5 := SPACE(5)
       ::feld6 := SPACE(5)
RETURN
********************************************************************************
METHOD maske2:felder(getlist)
       @  5, 1 GET ::feld4 PICTURE "XXXXX"
       @  6, 1 GET ::feld5 PICTURE "XXXXX"
       @  7, 1 GET ::feld6 PICTURE "XXXXX"
RETURN self
Nach dem Erfassen wird über nAuswahl 8 gespeichert und dann über felder(getlist) nochmal angezeigt. Sobald das drin oder draußen ist, taucht der Fehler auf, bzw verschwindet.

Betrachtet das oBild nur als Methode die Promptfelder einfacher überall anzuzeigen. Ich werde es nochmal ohne dieses Objekt testen, denke aber mal, dass das nichts ändern wird.

Ihr werdet jetzt bestimmt sagen: Na klar, logisch, dass es daran liegt. Ich habe es aber nicht geahnt, weil es nur bei verschachtelten GETS ohne Clear Gets passiert. Wieder etwas dazugelernt
Jetzt wäre nur noch eine tiefgreifende Erklärung dafür interessant....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

So, Fehler behoben,

Till Warwig hat mir den entscheidenden Tipp gegeben:

Eigentlich recht simpel, aber wie immer.....

In meinem Fall nach jedem ReadKill() ein getlist := {} machen und alles klappt. Mein :felder(getlist) nach jedem Skip, oder sonstwo hat das Getlist Array jedesmal erweitert und somit hatte ich meine Schleifen. Das wußte ich zwar auch, aber ich kam nicht drauf, das man sofort nach Readkill() ein getlist := {} machen soll/darf/muß.

Und wieder schlauer geworden..
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten