![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
![]()
Вобщем есть 4 CheckBox'а и есть Label в котором пишет Осталось: 2 (т.е CheckBox'ов больше), если CheckBox.Checked:=True; - число в "Осталось: 2" уменьшается на единицу, если CheckBox.Checked:=False; - число увеличивается на единицу, но число не может быть больше два (как изначально указано в Label) и число не может быть меньше ноль
Вобщем накидал код он он пашет криво т.к чекбоксов много и уже несколько часов мучаюсь, можно в принципе если Осталось: 0 - выключать (Enabled:=False) все оставшиеся CheckBox'ы, а выбранные оставить включенными... Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
я лично ничего не понял из условий задачи...
![]() Помните, что невнятная формулировка задания порождает невнятный алгоритм, который, в свою очередь невнятно работает... |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]()
зачем так много копий одного кода?
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,543
|
![]()
используйте 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. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
![]()
evg_m, как-то плохо обьяснили, ничего не понял, можно конкретнее?
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 01.11.2012
Сообщений: 770
|
![]()
помогли на другой форуме
![]() |
![]() |
![]() |
![]() |
#9 |
Заблокирован
Регистрация: 02.03.2014
Сообщений: 439
|
![]()
Учитесь присваивать обработчики и работать с Sender. Код сходу сокращается вчетверо.
|
![]() |
![]() |
![]() |
#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 |