|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.03.2014, 09:47 | #1 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
Запутался с CheckBox'ами
Вобщем есть 4 CheckBox'а и есть Label в котором пишет Осталось: 2 (т.е CheckBox'ов больше), если CheckBox.Checked:=True; - число в "Осталось: 2" уменьшается на единицу, если CheckBox.Checked:=False; - число увеличивается на единицу, но число не может быть больше два (как изначально указано в Label) и число не может быть меньше ноль
Вобщем накидал код он он пашет криво т.к чекбоксов много и уже несколько часов мучаюсь, можно в принципе если Осталось: 0 - выключать (Enabled:=False) все оставшиеся CheckBox'ы, а выбранные оставить включенными... Код:
|
13.03.2014, 09:58 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
я лично ничего не понял из условий задачи...
Помните, что невнятная формулировка задания порождает невнятный алгоритм, который, в свою очередь невнятно работает... |
13.03.2014, 10:02 | #3 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
|
13.03.2014, 10:04 | #4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
зачем так много копий одного кода?
|
13.03.2014, 10:05 | #5 | |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
Цитата:
|
|
13.03.2014, 10:06 | #6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
используйте Label только для ВЫВОДА информации (не пользуйтесь ее текущим значением для получения НОВОГО!!)
Label2.Caption:=IntToStr(StrToInt(Label2.Caption)-1) если очень нужно заведите переменную Код:
НО лучше всего вообще не иметь оной а вычислять данную величину (checkedCount) в каждый нужный момент. Вычислять что-либо надо на основе ВСЕХ заинтересованных (!) и желательно это делать в одном месте программы! поскольку прозвучало слово вычислять то логично использовать или функцию xxx:=CalcCheckedValueX; вычисляем в одном месте (в функции CalcCheckedValueX !) используем в о всех нужных обработчиках (т.е. там где возможно изменение наших отметок) xxx:=CalcCheckedValueX; if xxx.limit>2 then showmessage(превышен лимит!!) else label2.Caption:=inttost(xxx.checkco unt); Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 13.03.2014 в 10:08. |
|
13.03.2014, 10:14 | #7 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
evg_m, как-то плохо обьяснили, ничего не понял, можно конкретнее?
|
13.03.2014, 11:04 | #8 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
помогли на другой форуме
|
13.03.2014, 12:06 | #9 |
Заблокирован
Регистрация: 02.03.2014
Сообщений: 439
|
Учитесь присваивать обработчики и работать с Sender. Код сходу сокращается вчетверо.
|
13.03.2014, 12:18 | #10 |
Заблокирован
Регистрация: 21.11.2008
Сообщений: 4,986
|
Что то намудренно так что и не поймешь какова задача. Я бы, сперва, отделил бы логику от графики а уж потом бы что то и решал.
p.s. Вообще, все эти обработчики событий можно было бы перенести в отдельный класс, в отдельную функцию, к тому же, судя по коду, тут в Label2.Caption присваивается одно и то же значение по нескольку раз а это крайне глупо и в современных проектах не приемлемо. Последний раз редактировалось vasek123; 13.03.2014 в 12:26. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как выполнить функцию в случае нажатия на CheckBox, если данный CheckBox был добавлен через код? | PAMAC | Microsoft Office Excel | 7 | 21.02.2013 15:33 |
Работа с Hint'ами | MyLastHit | Общие вопросы Delphi | 11 | 10.08.2010 23:05 |
работа с Hint-ами | nusik | Общие вопросы Delphi | 7 | 01.06.2009 11:26 |