MFC DDX_Radio вызывает ошибку подтверждения отладки при вызове DoDataExchange (строка 286 dlgdata.cpp)

У меня есть диалог с переключателем с группами из 4 кнопок.
DDX_Radio(pDX, D_RADIO_GROUPLEAD, intToStore) в DoDataExchange есть для сохранения и загрузки.
Работает отлично.

Выбор изменен, DoDataExchange вызван, сохраняет и загружает данные без проблем.

Проблема возникает, когда я скрываю один из переключателей (скрыть через ShowWindow(SW_HIDE), Давайте просто назовем это 3-й кнопкой для справки. И ранее выбор был этой 3-й кнопкой.

У меня есть логика, которая будет автоматически выбирать по умолчанию (тот, с группой помечены как истинные в редакторе). Я вызываю кнопку SetCheck (1).

Визуально все вроде бы работает.

Однако, когда я нажимаю 2-ю кнопку, а затем пытаюсь вызвать DoDataExchange (отсюда DDX_Radio), это приведет к ошибке отладочного подтверждения. (dlgdata.cpp Строка 286)

А ТАКЖЕ

данные не правильно заполнены обратно в intToStore,

Почему это может быть и как я могу избежать этой проблемы?

Спасибо.

0

Решение

Проблема в том, что в Windows функция автоматического переключателя пропускает отключенные кнопки. В деталях. Вы нажимаете кнопку 2, когда кнопка 3 выбрана и отключена. Кнопка 2 выбирается, но кнопка 3 не проверяется.

Следующая проблема возникает при запуске DoDataExchange. Он не проверяет, включена ли кнопка или отключена. DDX_Radio просто перебирает все переключатели и обнаруживает, что 2 группы в группе включены. Это вызывает ASSERT. DDX_Radio не волнует, включена кнопка или отключена.

Мой совет: используйте свой собственный дескриптор OnClick и отключите все остальные кнопки вручную.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]