Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CheckBox [D6, WinXP]


serko ©   (2005-01-17 20:32:00) 

Почему когда я программно делаю CheckBox1.Checked:=true или CheckBox1.Checked:=false срабатывает событие Checkbox1.OnClick? Как этого избежать?


SergP   (2005-01-26 00:39:00) [1]


>  [16] VMcL ©   (26.01.05 00:19)


А прикинь, если бы он написал так:

Public Function SomeFunction(<тут какие-нить параметры>) As Boolean
   ' ...
   Return SomeOtherFunction(...)
End Function

а оплата труда у него по количеству строк кода...


VMcL   (2005-01-26 00:19:00) [2]

>> Hmm ©  (18.01.05 17:28) [14]

Понтоваться я буду перед своим Group Leader'ом и CEO, поскольку от них зависит моя зряплата. Но явно не перед Вами или кем-либо ещё с этого форума.

WBW.

P.S. Если уж хочется настоящего сарказма, то зацените увиденный мной как-то код (правда, на VB.NET):
Public Function SomeFunction(<тут какие-нить параметры>) As Boolean
   Dim retValue As Boolean

   ' ...

   retValue = SomeOtherFunction(...)
   If retValue = True Then
       Return True
   Else
       Return False
   End If
End Function


Ega23   (2005-01-18 17:32:00) [3]

- явно лишнее. Пахнет сарказмом и понтами.

Привыкай. Если выкладываешь код - будь готов к тому, что его могут назвать "полный бред", "ахинея" и т.п.


Hmm   (2005-01-18 17:28:00) [4]


> checkbox1.Checked := not checkbox1.Checked;

Это мне помогло.

> CheckBox.OnClick:=nil;
> Checkbox.Checked:=true;
> CheckBox.OnClick:=CheckBox1Click;

Это тоже много лучше, нежели [4].

А вот это:

> Когда я вижу такой код, у меня рука сразу тянется к пистолету.
> Правда, к водяному.

- явно лишнее. Пахнет сарказмом и понтами.


Ega23   (2005-01-18 17:21:00) [5]

2 Hmm ©   (18.01.05 17:18) [12]
И незачем через 5 часов после последнего поста, вытаскивать тему на вершину форума, ради подобного замечания.

Ты считаешь, что это замечание тебе ничем не помогло?


Hmm   (2005-01-18 17:18:00) [6]

Дело в том, что любая критика должна иметь место. Я никогда не питал иллюзий о том, что мой код идеален. Человеку нужна была помощь (не думаю, что ему важна была именно оптимальность кода), ответов по сути вопроса не было, и я решил помочь, так как умею. И незачем через 5 часов после последнего поста, вытаскивать тему на вершину форума, ради подобного замечания.


Ega23   (2005-01-18 17:08:00) [7]

Эт типа на место поставили?

Нет, верно и так и так. Просто если при приёме на работу тебя попросят выслать пример кода, а ты пошлёшь if  checkbox1.Checked then checkbox1.Checked:=false else ..., не удивляйся, когда тебя "отфутболят".


Hmm   (2005-01-18 16:22:00) [8]


> checkbox1.Checked := not checkbox1.Checked;

Эт типа на место поставили?


VMcL   (2005-01-18 08:18:00) [9]

>> Hmm ©  (17.01.05 22:46) [4]

[OFFTOPIC]

Когда я вижу такой код, у меня рука сразу тянется к пистолету. Правда, к водяному.

> if  checkbox1.Checked then checkbox1.Checked:=false
else checkbox1.Checked:=true;


checkbox1.Checked := not checkbox1.Checked;

> if cl=true then

No comments.

[/OFFTOPIC]


serko   (2005-01-18 03:15:00) [10]

Ну спасиба ребята! Еще не проверял, но думаю все логично!


Hmm   (2005-01-18 00:42:00) [11]

Так и знал, что можно проще )


SergP   (2005-01-17 23:17:00) [12]


> Как этого избежать?


CheckBox.OnClick:=nil;
Checkbox.Checked:=true;
CheckBox.OnClick:=CheckBox1Click;


Jel   (2005-01-17 22:48:00) [13]

Можно еще и положение мышки проверить в обработчике, только извраты все это. Какая разница откуда установили свойство? Почему в одном случае реакция нужна а в другом нет?


Hmm   (2005-01-17 22:46:00) [14]


var cl:boolean;{что-то типа флага указывающего откуда идет установка checked :=true/false}
...

procedure TForm1.Button1Click(Sender: TObject);
{эта процедура устанавливает/снимает галочку}
begin
cl:=true;
if  checkbox1.Checked then checkbox1.Checked:=false
else checkbox1.Checked:=true;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if cl=true then cl:=false
else begin
//твои действия - реакция на клик
 showmessage('!');
end;
end;


PS: Возможно есть другие, более простые варианты, тем неменее и этот работает :)


Apocalepse   (2005-01-17 22:46:00) [15]

Потому что так и должно быть :-)


Jel   (2005-01-17 22:44:00) [16]

На самом деле это логично. В onClick обычно предпринимают действия отражающие реальное состояние CheckBox-а. Ты меняешь состояние, пусть и программно - событие вызывается.


serko   (2005-01-17 22:21:00) [17]

че такой сложный вопрос?


Наверх

Титульная страница Поиск, карта сайта Написать письмо