GUI und User Function

  • Hallo,

    ich habe eine GUI mit mehreren Textfeldern und einem Button.
    Beim Drücken des Buttons, springt das Programm in die Function, aber die
    Textfelder sind leer. Muss ich die als Parameter mit übergeben? Wenn ja, wie?????


    [autoit]


    GUICtrlSetOnEvent($Button_speichern,"speichern")

    [/autoit][autoit][/autoit][autoit]

    ....

    [/autoit][autoit][/autoit][autoit]

    FUNC speichern()
    ;Inhalt der wichtigsten Felder prüfen, sonst braucht man nichts zu speichern
    $laenge = 0

    [/autoit][autoit][/autoit][autoit]

    ;Inhalt aus den Textfeldern holen und die Länge bestimmen. Leerzeichen am Anfang und Ende werden abgeschnitten
    $len1 = stringlen(StringStripWS(GUICtrlRead($Text1),3))
    $len2 = stringlen(StringStripWS(GUICtrlRead($Text2),3))
    $len3 = StringLen(StringStripWS(GUICtrlRead($Text3),3))
    $len4 = StringLen(StringStripWS(GUICtrlRead($Text4),3))
    $len5 = StringLen(StringStripWS(GUICtrlRead($EURO1),3))
    $len6 = StringLen(StringStripWS(GUICtrlRead($EURO2),3))
    $laenge = $len1 + $len2 + $len3 + $len4 + $len5 + $len6

    [/autoit][autoit][/autoit][autoit]

    if $laenge <= 1 Then
    msgbox (0,"Achtung keine Daten","Die Felder sind nicht gefüllt. Es werden keine Daten gespeichert!")
    Return
    elseif $laenge > 0 Then
    msgbox (0,"Achtung speichern","Die eingegebenen Daten für das Plakat werden gespeichert!")
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ...
    ENDFUNC

    [/autoit]

    Viele Grüsse

    Anfänger

    Edit BugFix: Bitte Tags benutzen - AutoIt-Tags gesetzt.

    Einmal editiert, zuletzt von BugFix (22. Mai 2009 um 10:37)

    • Offizieller Beitrag

    ;Inhalt aus den Textfeldern holen und die Länge bestimmen. Leerzeichen am Anfang und Ende werden abgeschnitten

    Hier bestimmst du nur die Länge des Inhalts, speicherst aber nicht den Inhalt.

    msgbox (0,"Achtung speichern","Die eingegebenen Daten für das Plakat werden gespeichert!")

    Ich sehe nicht, dass hier der Inhalt gelesen und gespeichert wird.

  • Hallo Bugfix,

    ich speichere weiter unten ....

    $Plakate_Array[$zaehler][7] = GUICtrlRead($Text1)
    $Plakate_Array[$zaehler][8] = GUICtrlRead($Text2)
    $Plakate_Array[$zaehler][9] = GUICtrlRead($Text3)
    $Plakate_Array[$zaehler][10] = GUICtrlRead($Text4)
    $Plakate_Array[$zaehler][11] = GUICtrlRead($Text5)

    aber oben bei den Längenbestimmung bekomme ich immer schon 0, obwohl ich einen Text eingegeben habe.

  • So, habe jetzt den kompletten Code mitgeschickt, hoffe das verwirrt nicht zu sehr

    Noch einmal meine Probleme:

    Die gefüllten Textfelder werden in der Func speichern als 'leer' angezeigt.
    Wie kann ich ermitteln, wie viele Array_Zeilen bereits gefüllt sind? Die Funktion die ich zur Zeit nutze dauert viel zu lange.

    Danke für Eure Hilfe.

    Gruss Anfänger

    Einmal editiert, zuletzt von anfänger (25. Mai 2009 um 09:21)

    • Offizieller Beitrag

    Der Fehler ist hausgemacht:
    Du erstellst 2 GUI, verwendest für beide identische Controlnamen und weist diesen auch noch dieselben Events zu. - Das kann nicht gut gehen.

    Deine Array-Konzept ist auch sehr unklar:
    $Plakate_Array[0][190] <== Array mit nur einer Zeile aber 191 Spalten ? - Ist das beabsichtigt ?
    Warum überhaupt 2D-Array, wenn du nur eine Dimension belegst?

    Und das hier geht auch effizienter:

    [autoit]


    $len4 = StringLen(StringStripWS(GUICtrlRead($Text4),3))
    $len5 = StringLen(StringStripWS(GUICtrlRead($EURO1),3))
    $len6 = StringLen(StringStripWS(GUICtrlRead($EURO2),3))
    $laenge = $len1 + $len2 + $len3 + $len4 + $len5 + $len6
    if $laenge <= 1 Then ;...Fehlerbehandlung
    ; besser:
    If (StringStripWS(GUICtrlRead($Text4),3) = '') Or _
    (StringStripWS(GUICtrlRead($EURO1),3) = '') Or _
    (StringStripWS(GUICtrlRead($EURO1),3) = '') Then ;...Fehlerbehandlung

    [/autoit]
  • Hallo Bugfix,

    ich brauch sogar noch mehr GUIs, die alle ähnlich aussehen, aber doch unterschiedlich sind.
    Zum Zeitpunkt des Speicherns habe ich ja nur eine GUI geöffnet und mit Daten gefüllt. In Access mache ich
    so was auch, da geht das ohne Probleme.
    Wie soll ich das mit Autoit händeln?
    $Plakate_Array[0][191] ist nur für die Kopfzeile
    Anschließend wird der Inhalt aus der GUI eingetragen. Gibt der Anwender dann wieder was neues ein und drückt
    den Button 'speichern', dann wird wieder das Array geprüft, der Zähler hochgesetzt und die Daten zu den anderen Daten
    im Array gespeichert.

    So hätte ich es gerne ;)

    • Offizieller Beitrag

    Zum Zeitpunkt des Speicherns habe ich ja nur eine GUI geöffnet und mit Daten gefüllt.


    Das ist völlig unerheblich, die GUI existiert und du greifst auf diese und deren Controls auch zu, wenn sie nicht sichtbar ist.
    Verwende einfach eineindeutige ID's und Eventzuweisungen, dann hast du die Probleme nicht.
    Deine Arraygestaltung habe ich aber trotzdem nicht nachvollziehen können - allerdings habe ich das Skript auch nicht durchgearbeitet um zu sehen, was wann und wo passiert. ;)