Я столкнулся с очень странной проблемой с кодом, над которым я работаю. У меня есть панель макета таблицы, которая содержит две меньшие панели макета таблицы. Один содержит 6 переключателей для управления режимами SMEMA, а другой содержит кнопки для управления действиями конвейера (загрузка, перемотка).
Вложенный в обработчик событий щелчка для кнопок конвейера, у меня есть функция, которая отключает кнопки при активном движении (сегмент ниже). Я обнаружил, что, когда линия вызывает отключить кнопку перемотки, внезапно срабатывает событие CheckedChanged для переключателей. ПРИМЕЧАНИЕ. Это только в том случае, если выбрана одна из 6 кнопок.
bool isIdle = state.IsIdle;
//process tab
_buttonStartupRoutine.Enabled = isIdle;
_ckbuttonPLCRun.Enabled = true;
_buttonCameraMode.Enabled = isIdle;
_checkBoxDryRun.Enabled = isIdle;
_updownJogScale.Enabled = isIdle;
_buttonConveyorLoad.Enabled = isIdle;
_buttonConveyorUnload.Enabled = isIdle;
_buttonConveyorRewind.Enabled = isIdle;
_updownConveyorWidth.Enabled = isIdle;
Я подтвердил, что эта строка вызывает событие CheckedChanged, перемещая его выше в стеке вызовов, поэтому он вызывается немедленно, когда кнопка перемотки нажата. Однако я не могу найти никакой связи между ними, кроме как использовать одну и ту же общую панель макета таблицы, несмотря на то, что она находится в двух отдельных вложенных панелях.
Кто-нибудь когда-либо испытывал что-то подобное?
РЕДАКТИРОВАТЬ : С большим количеством устранения проблем я подтвердил, что что-то стекает в переключатели. Я добавил оператор foreach над строкой с надписью _buttonConveyorRewind.Enabled = isIdle; , которая отключает все переключатели на панели макета таблицы. Это также снова активирует их, потому что оно возвращается через прикрепленный код после завершения движения конвейера.
foreach (RadioButton button in tableLayoutPanel22.Controls)
{
button.Enabled = isIdle;
}
Мне также пришлось вызвать событие Focus на главной панели, чтобы предотвратить прыжок панели внизу панели переключателей. Похоже, это помешало переключению радиокнопок, и режим SMEMA самой машины также оставался неизменным. Казалось бы, событие Focus где-то стекало вниз, и переключатели переключались.