Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Работа с чексбоксами....   Найти похожие ветки 

 
markers ©   (2004-11-25 10:37) [0]

Вообщем что то я не пойму малость, сделал код который запишнул в оброботчик он клин в чексбоксах На форме 6 чексбоксов
в обработчике такой код:
if (VisibleUserName.Checked = False) and (StaticVisiblePoleCount <= 1) then
  VisibleUserName.Checked:=True
else if (VisibleUserName.Checked = False) and (StaticVisiblePoleCount >= 2) Then
  StaticVisiblePoleCount:=StaticVisiblePoleCount-1
else if (VisibleUserName.Checked = True) and (StaticVisiblePoleCount > 1) Then
  StaticVisiblePoleCount:=StaticVisiblePoleCount+1;

Работает всё нормально, но почему-то через некоторое время кликанья, появляется откуда-то лишняя единица, которая портит всю погоду... да в переменной StaticVisiblePoleCount содержится число чекнутых чексбоксов (Пока присваиваю самостоятельно в он креат формы цифру 6 (Количество отмеченных чекбоксов))
Извиняюсь что так коряво объяснил но думаю вы поймете, главное это код, и где в нем изъян уловить не могу..... Помогите плиз;)


 
markers ©   (2004-11-25 10:59) [1]

Никто не понял чтоли мой вопрос из-за кривизны написания?


 
Sandman25 ©   (2004-11-25 11:09) [2]

Никто не понял, зачем нужно шесть чекбоксов вместо одного


 
markers ©   (2004-11-25 11:13) [3]

Неважно зачем шесть чексбоксов, главное необходимо, чтоб хоть один из шести чексбоксов был включен в обязательном порядке Тоесть при клике не чексбоксе мы должны выяснить сколько чексбоксов уже отмечено, если ниодного, то не разверашь убирать галку с текущего, а если хоть один из шести уже отмечен, то разрешаем снять метку


 
markers ©   (2004-11-25 11:14) [4]

Но радио здесь не пойдет потому-что может быть выбранное любое количество которое  >1 <=6


 
Sash ©   (2004-11-25 11:16) [5]

по моему будет так:

if (VisibleUserName.Checked = False) and (StaticVisiblePoleCount <= 1)
then VisibleUserName.Checked:=True;

if (VisibleUserName.Checked = False) and (StaticVisiblePoleCount >= 2)
Then StaticVisiblePoleCount:=StaticVisiblePoleCount-1;

if (VisibleUserName.Checked = True) and (StaticVisiblePoleCount > 1)
Then StaticVisiblePoleCount:=StaticVisiblePoleCount+1;


 
clickmaker ©   (2004-11-25 11:20) [6]


> при клике не чексбоксе мы должны выяснить сколько чексбоксов
> уже отмечено, если ниодного, то не разверашь убирать галку
> с текущего, а если хоть один из шести уже отмечен, то разрешаем
> снять метку


AllowUncheck := false;
 for i := 0 to ControlCount-1 do begin

   if (Controls[i] is TCheckBox) then begin

     if TCheckBox(Controls[i]).Checked then AllowUncheck := true;
   end;
 end;
 if (not TCheckBox(Sender).Checked) and (not AllowUncheck) then
   TCheckBox(Sender).Checked := true;


 
markers ©   (2004-11-25 11:23) [7]

2 clickmaker, это конечно круто не спорю, но это все черкс боксы на форме будет проверять, а как быть когда нужно только 6 определенных, а не все, которых там хватает...


 
markers ©   (2004-11-25 11:25) [8]

2 Sash © Ещё хуже.... в начала ничего, а потом когда ставишь метку, а снять её уже невозможно... (Поставил и переправил в каждом обработчике OnClick чекбоксов)


 
markers ©   (2004-11-25 11:25) [9]

2 clickmaker кстати может как-нибудь к твоему коду прикрутить тэг, и по нему проверять?


 
Cosinus ©   (2004-11-25 11:27) [10]


> markers ©   (25.11.04 11:23) [7]

if (TCheckBox(Controls[i]).Checked) and (TCheckBox(Controls[i]).Tag {Tag только для примера, использовать можно все, что угодно}=1) then...


 
Cosinus ©   (2004-11-25 11:28) [11]


> markers ©   (25.11.04 11:25) [9]

Опоздал, ты сам додумался :)))


 
markers ©   (2004-11-25 11:36) [12]

Всё вроде работает, только что-то с первого галка не снимается, почему-то тэг стоит у всех


 
cae ©   (2004-11-25 11:42) [13]

Еще вариант - поместить все CheckBoxs, например, на панель и писать так :
 for i := 0 to Panel1.ControlCount-1 do
 begin
 .........
 end ;


 
Cosinus ©   (2004-11-25 11:45) [14]


> markers ©   (25.11.04 11:36) [12]

Не понял я что то тебя. Объясни поразвернутее, что у тебя не работает.


 
markers ©   (2004-11-25 12:10) [15]

Какие - то страности, в шикле прогоняется всего три компонента хотя их много.... А дальше не заходит, что-то я запутался... :(
Сюда на заходит
for i := 0 to ControlCount-1 do
 begin
  if (Controls[i] is TbsSkinCheckRadioBox) then

TbsSkinCheckRadioBox - Скинованный чексбокс...
Вообщем я что-то вообще не понимаю, вроде заходила до другой правки но не этого


 
markers ©   (2004-11-25 12:16) [16]

даперло, сейчас проверяю


 
markers ©   (2004-11-25 12:26) [17]

Сделал панель, на которой 7 видимых объектов, при bsSkinPanel8.ControlCount-1 определяется 48, ну ладно но на третьем цыкле вылетает List index out of bounds (3)


 
markers ©   (2004-11-25 15:28) [18]

Ух, наконец-то всё пашет рулезно;) Спасибо всем ребята!;) (И девушки если есть;) Такая мелочь а как кость встанет в горле!;) Ещё раз спасибо;)



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
14-1101101656
Slider007
2004-11-22 08:34
2004.12.12
Два вопроса по настройке Windows XP (sp2)


1-1101856765
newage
2004-12-01 02:19
2004.12.12
производный класс свои проперти


6-1096821871
Agent-Smith
2004-10-03 20:44
2004.12.12
Реализация работы между сегментами сети


1-1101579193
Sur
2004-11-27 21:13
2004.12.12
RT_MENU


1-1101674331
Bobby Digital
2004-11-28 23:38
2004.12.12
Код виндовса ?