Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
14-1100851819
БареллО
2004-11-19 11:10
2004.12.12
Совместимость


4-1098938185
carmen
2004-10-28 08:36
2004.12.12
Как изменить значение TEdit в чужой программе и нажать кнопку в


14-1101231153
Kurtevich
2004-11-23 20:32
2004.12.12
Жалобы на Дельфи :(


14-1101284415
Ricko
2004-11-24 11:20
2004.12.12
"На самом деле"


4-1098782955
Aleksandr.
2004-10-26 13:29
2004.12.12
Почему DispatchMessage выдает AV?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский