解決できない別の問題があります
ツリービューにユーザー(名、姓、年齢)を追加する次のコードがあります。1つの小さなことを除いて、すべてうまく機能します。初めてユーザーを追加するときにのみうまく機能します。[追加]をクリックしてからさらに別のユーザーを追加しようとすると、2人のユーザーが追加され、次に3人、4人というように追加され、追加するたびに増加します。クリックイベントをキャッチするコードは次のとおりです。
onClicked (dodajUczBt gui) (dodajUcz gui dbh stores)
dodajUcz
クリックを処理する関数は次のとおりです。
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
は代数的データ型であり、データベースにaddUser
を追加する関数です。Uczestnik
guiは代数的データ型GUI
でもあり、によって作成されたすべてのgui要素を保持します。castToXml
それwidgetHide
が主な問題だと思います。何もしなくても(ダイアログを開いてから閉じるだけ)、次に開いたときに2人のユーザーを追加しようとするからです。
この問題を解決する方法はありますか?どんな助けでも大歓迎です:)