Domanda

Ho un altro problema che non riesco a risolvere

Ho un codice seguente che aggiunge un utente (nome, cognome ed età) in un albero. Funziona tutto bene tranne una piccola cosa: funziona bene solo quando si aggiunge un utente per la prima volta. Quando si preme Aggiungi e quindi provi ad aggiungere un altro utente, tenterà di aggiungere 2 utenti, quindi 3, 4 e così via, aumentando con ogni aggiunta. Ecco il codice che cattura l'evento Click:

onClicked (dodajUczBt gui) (dodajUcz gui dbh stores)

Ed ecco la funzione dodajUcz che gestisce il clic:

dodajUcz gui dbh stores =
    do  entrySetText (nImie gui) ""
        entrySetText (nNazwisko gui) ""
        entrySetText (nWiek gui) ""
        onClicked (cancelAddUczBt gui) (widgetHide (dodajUzDialog gui))
        onClicked (zapiszUczBtn gui) procADD
        windowPresent (dodajUzDialog gui)
    where procADD = do
            ucz <- getUczestnik
            let store = uczestnicy stores
            New.listStoreAppend store ucz
            dlugosc <- New.listStoreGetSize store
            labelSetText (lblLiczbaUcz gui) $ "Liczba uczestników: "++ show dlugosc 
            widgetHide (dodajUzDialog gui)
            addUser ucz dbh
          getUczestnik = do
                                imie <- entryGetText (nImie gui)
                                nazwisko <- entryGetText (nNazwisko gui)
                                wiek <- entryGetText (nWiek gui)
                                let wiek' = read wiek :: Integer
                                return $ Uczestnik 0 imie nazwisko wiek' False

Uczestnik è un tipo di dati algebrici e addUser è una funzione che aggiunge un Uczestnik nel database. La GUI è anche un tipo di dati algebrici GUI, che contiene tutti gli elementi della GUI creati da castToXml

Me lo sembra widgetHide è il problema principale, perché anche se non fai nulla (basta aprire la finestra di dialogo e quindi chiuderla) proverà ad aggiungere 2 utenti la prossima volta che lo aprirai.

Qualche idea su come risolvere questo problema? Qualsiasi aiuto sarebbe molto apprezzato :)

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top