У меня есть другая проблема, которую я не могу решить
У меня есть следующий код, который добавляет пользователя (имя, фамилию и возраст) в древовидную структуру.Все это работает хорошо, за исключением одной маленькой вещи: она работает хорошо только при первом добавлении пользователя.Когда вы нажимаете кнопку «Добавить», а затем пытаетесь добавить еще одного пользователя, он пытается добавить 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 пользователей при следующем открытии.
Есть идеи, как решить эту проблему?Любая помощь будет принята с благодарностью:)