Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 18:51   #1
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию Как избежать цепи "CheckBox.Checked" -> CheckBoxClick

Здравствуйте!
В моей программе один столбец в StringGrid отвечает за наличие/отсутствие определённого свойства. Есть звёздочка - есть наличие. Нет звёздочки - есть отсутствие.
Менять значение поля я решил через CheckBox. Удобно и наглядно. С галочкой - есть; без галочки - нет.
Соответственно, для отмечания через CheckBoxClick заносим или убираем звёздочку в столбец.
Но вот в чём проблема. Переход на другую строку, в которой это свойство отличается, воспринимается тоже как Click. И программа начинает вести себя так, как будто для этой строки тоже нажали на CheckBox. От этого есть избавление без глубокого копания в недра?
Ship_1 вне форума Ответить с цитированием
Старый 17.12.2015, 18:58   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Чего это переход на другую строку в StringGrid чекбоксом воспринимается как Click? Checked правишь? Можно перед правкой OnClick в nil сбрасывать, потом восстанавливать. Или флажком управлять
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.12.2015, 19:19   #3
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Чего это переход на другую строку в StringGrid чекбоксом воспринимается как Click? Checked правишь?
Ну да. В зависимости от звёздочки в колонке checked либо true, либо false.
Цитата:
Сообщение от Аватар Посмотреть сообщение
Можно перед правкой OnClick в nil сбрасывать, потом восстанавливать. Или флажком управлять
Можно чуть поподробнее? Я с подобным пока не сталкивался. Это в процедуре события StringGrid OnClick, вызывающего изменение checked, перед этим изменением написать что-то типа CheckBox.onClick:=nil? А после?
Ship_1 вне форума Ответить с цитированием
Старый 17.12.2015, 19:22   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А после CheckBox.onClick:=CheckBoxClick или как там у тебя метод называется нацеленный на OnClick
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.12.2015, 19:22   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Мало кода.
come-on вне форума Ответить с цитированием
Старый 18.12.2015, 10:35   #6
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А после CheckBox.onClick:=CheckBoxClick или как там у тебя метод называется нацеленный на OnClick
Да особо никак... Всё банально...
Код:
procedure TForm1.StringGrid1Click(Sender: TObject);
Var
  NRow:Integer;
begin

  NRow:=StringGrid1.Row;

  If StringGrid1.Cells[6,NRow]='*' then CheckBox2.Checked:=true else CheckBox2.Checked:=false;
...

end;
И если в 6-м столбце строки таблицы, с которой ушёл, и той, на которую пришёл, значения различаются, по этой процеддуре это вызывает изменение статуса CheckBox2.Checked, вслед за чем происходит выполнение TForm1.CheckBox2Click. Само. Видимо, просто из-за изменения статуса CheckBox2.Checked.
В этом случае как применить
Цитата:
Можно перед правкой OnClick в nil сбрасывать, потом восстанавливать.
Ship_1 вне форума Ответить с цитированием
Старый 18.12.2015, 10:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  NRow:=StringGrid1.Row;

  If StringGrid1.Cells[6,NRow]='*' then begin
    CheckBox2.OnClick:=nil;
    CheckBox2.Checked:=true else CheckBox2.Checked:=false;
    CheckBox2.OnClick:=CheckBox2Click;
  end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2015, 11:23   #8
Ship_1
Форумчанин
 
Регистрация: 10.02.2014
Сообщений: 526
По умолчанию

Спасибо большое!
Ship_1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
querySelectorAll('[type="checkbox"]:checked') не работает в ИЕ Maxx JavaScript, Ajax 3 03.12.2015 12:40
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Ошибка "Недостаточно сведений для обновления ключевого поля" как её избежать Gulik БД в Delphi 0 11.08.2011 21:23
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Применить стиль ко всем инпутам, кроме "radio" и "checkbox"? barbiturat HTML и CSS 1 03.12.2008 15:33