1 (edited by m.prokhachev 2018-08-08 13:59:40)

Topic: два взаимосвязанных чек-бокса

есть на форме два взаимосвязанных чек-бокса, смысл: выбран может быть только один из двух. реализовано это так через OnClick:

procedure frmMeasurement_cbAllTime_OnClick (Sender: TObject);
begin
  frmMeasurement.сbForMonth.Checked := False;
  frmMeasurement.cbAllTime.Checked := True;
end;

procedure frmMeasurement_сbForMonth_OnClick (Sender: TObject);
begin
  frmMeasurement.cbAllTime.Checked := False;
  frmMeasurement.сbForMonth.Checked := True;
end;

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

2 (edited by sibprogsistem 2018-08-08 15:18:01)

Re: два взаимосвязанных чек-бокса

работает

Post's attachments

Attachment icon test2.rar 3 kb, 312 downloads since 2018-08-08 

Re: два взаимосвязанных чек-бокса

интересно... а зачем еще и на MouseUp вешать?..

Re: два взаимосвязанных чек-бокса

Разные варианты

5 (edited by m.prokhachev 2018-08-08 16:16:02)

Re: два взаимосвязанных чек-бокса

теперь какой-то
---------------------------
Monitoring
---------------------------
List index out of bounds (5)
---------------------------
ОК   
---------------------------
выскакивает при нажатии на эти чек-боксы... меня уже клинит...

какой список? какие индексы на чек-боксе? хз...

а твой пример работает без проблем. хотя уже в точности повторил как у тебя.

Re: два взаимосвязанных чек-бокса

попробуйте удалить базу данных и dll от него, мне тногда помогает

Re: два взаимосвязанных чек-бокса

А если реализовывать через CheckBox.State, то кусок кода:

procedure frmMeasurement_cbAllTime_OnMouseUp (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
  frmMeasurement.сbForMonth.State := cbUnchecked;
  frmMeasurement.cbAllTime.State := cbChecked;
end;

procedure frmMeasurement_сbForMonth_OnMouseUp (Sender: TObject; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
  frmMeasurement.cbAllTime.State := cbUnchecked;
  frmMeasurement.сbForMonth.State := cbChecked;
end;

вызывает следующее сообщение с ошибкой:

Сигнатура проблемы:
  Имя события проблемы:    APPCRASH
  Имя приложения:    Monitoring.exe
  Версия приложения:    1.0.0.0
  Отметка времени приложения:    5b6ac81b
  Имя модуля с ошибкой:    ntdll.dll
  Версия модуля с ошибкой:    6.1.7601.23572
  Отметка времени модуля с ошибкой:    57fd02d3
  Код исключения:    c0000005
  Смещение исключения:    0002ed2a
  Версия ОС:    6.1.7601.2.1.0.256.1
  Код языка:    1049
  Дополнительные сведения 1:    e8ad
  Дополнительные сведения 2:    e8adce1c2b9e7be834b4063ac3c53863
  Дополнительные сведения 3:    e8ad
  Дополнительные сведения 4:    e8adce1c2b9e7be834b4063ac3c53863

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt

Re: два взаимосвязанных чек-бокса

sibprogsistem wrote:

попробуйте удалить базу данных и dll от него, мне тногда помогает

не помогло

9 (edited by sibprogsistem 2018-08-08 17:13:23)

Re: два взаимосвязанных чек-бокса

а какая у вас версия программы?
хотя мой вариант  у вас работает

Думаю без Дмитрия тут не справиться

Re: два взаимосвязанных чек-бокса

фигня война... пошел целый детектив... судя по всему, я случайно заюзал имена какой-то MVD-шной переменной... после переименования checkbox'ов вылеты и сообщения об ошибках исчезли. и даже на OnClick все заработало:

procedure frmMeasurement_cbAllMeasurement_OnСlick (Sender: TObject; var Cancel: boolean);
begin
  frmMeasurement.cbAllMeasurement.State := cbChecked;
  frmMeasurement.cbMonthMeasurement.State := cbUnchecked;
end;

procedure frmMeasurement_cbMonthMeasurement_OnClick (Sender: TObject; var Cancel: boolean);
begin
  frmMeasurement.cbMonthMeasurement.State := cbChecked;
  frmMeasurement.cbAllMeasurement.State := cbUnchecked;
end;

однако... стоит выбрать второй чек-бокс, который cbAllMeasurement, то как ты ни нажимай на cbMonthMeasurement, больше галочка со второго чек-бокса не снимается, при этом снимается-ставится последовательно галочка на самом cbMonthMeasurement

11 (edited by m.prokhachev 2018-08-08 18:10:22)

Re: два взаимосвязанных чек-бокса

продолжаем детектив... если в примере test2 от sibprogsistem повесить события на OnClick, то происходит вылет программы с неизвестной ошибкой
таким образом, у меня складывается впечатление, что есть какой-то баг в MVD...

Re: два взаимосвязанных чек-бокса

Так должно работать

procedure Form1_CheckBox2_OnClick (Sender: TObject);
begin
    Form1.CheckBox1.Checked := not Form1.CheckBox2.Checked;
end;

procedure Form1_CheckBox1_OnClick (Sender: TObject);
begin
    Form1.CheckBox2.Checked := not Form1.CheckBox1.Checked;
end;
Dmitry.

Re: два взаимосвязанных чек-бокса

на проект test2 - работает, правда, с непривычной логикой, интересно ,а на моем - опять не так, как могло быть