powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TCheckBox.checked := True вызывает событие OnClick
6 сообщений из 6, страница 1 из 1
TCheckBox.checked := True вызывает событие OnClick
    #39987038
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из справкиNote: When you change the value of the Checked property programmatically, the OnClick event of the check box control occurs. Do not modify the value of the Checked property in the event handler of the OnClick event, because that leads into a deadlock situation.


На TCheckBox.OnClick повешен код создания и удаления ярлыка для автостарта программы.
Не мог понять, почему отключается автостарт.
У меня при создании главной формы есть строка:
Код: pascal
1.
checkAutostart.Checked := fileexists(fName + '.lnk');


и событие OnClick происходит до момента, когда Checked принимает свое значение, т.е. в моем случае Checked всегда будет False в событии OnClick при старте программы.
Неужели разработчики не могли позаботиться, чтобы OnClick срабатывало после назначения значения свойства Checked?

Можно, конечно, запихать код создания/удаления ярлыка в OnMouseDown, но Checked можно поменять ещё и клавишей Пробел с клавиатуры... И теперь придется задействовать два события вместо одного :(

А как бы вы поступили? Или как правильно в моем случае?
Как вариант
Код: pascal
1.
2.
3.
  checkAutostart.OnClick := nil;
  checkAutostart.Checked := fileexists(fName + '.lnk');
  checkAutostart.OnClick := checkAutostartClick;
...
Рейтинг: 0 / 0
TCheckBox.checked := True вызывает событие OnClick
    #39987049
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Не заморачивался бы на хранении/изменении и какими-то действиями именно в компоненте - вынес бы в флаг конфигурации.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var  GlobalFlagAutoRun:boolean=false;

// где нужно проверить
if (GlobalFlagAutoRun)  then ....  чего-то делаем .....

// при конфигурировании
GlobalFlagAutoRun := FileExists(....) and CheckBox1.Checked;  // если уж очень нужно на FileExists() завязаться.
...
Рейтинг: 0 / 0
TCheckBox.checked := True вызывает событие OnClick
    #39987051
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Неужели разработчики не могли позаботиться, чтобы OnClick срабатывало после назначения значения свойства Checked?
Ты не поверишь, именно так оно и работает.

Ищи багу у себя.
...
Рейтинг: 0 / 0
TCheckBox.checked := True вызывает событие OnClick
    #39987052
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11

и событие OnClick происходит до момента, когда Checked принимает свое значение

Ставьте бряку и ищет откуда приходит это событие
...
Рейтинг: 0 / 0
TCheckBox.checked := True вызывает событие OnClick
    #39987057
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TCheckBox.checked := True вызывает событие OnClick
    #39987070
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, действительно, беру свои слова обратно
X11
событие OnClick происходит до момента, когда Checked принимает свое значение, т.е. в моем случае Checked всегда будет False в событии OnClick при старте программы.
Неужели разработчики не могли позаботиться, чтобы OnClick срабатывало после назначения значения свойства Checked?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TCheckBox.checked := True вызывает событие OnClick
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]