У меня есть форма с двумя текстовыми полями, A
и B
, которые должны вести себя следующим образом:Предотвращение цикла обработчика событий
- Typing что-то в
A
следует установитьB.Text = f(A.Text)
- Typing что-то в
B
должен наборA.Text = g(B.Text)
... для некоторых произвольных и потенциально несвязанных функций f
и g
,
Проблема я столкнулся в том, что наивная реализация просто бросать выше код в обработчик каждого поля будет создавать бесконечный цикл как A
«s обработчик обновит B
» значение s и вызвать обработчик B
«s, который будет обновление A
и т. д.
Что было бы правильным (и, желательно, потокобезопасным) способом справиться с этим? Или каким-то образом определяли, было ли изменение сделано вручную или программно, каким-то образом подавляя события, срабатывающие при изменении значения, или каким-либо другим способом.
Вы можете использовать событие KeyPressed вместо того, что вы в настоящее время используете (TextChanged?). –
К сожалению, 'KeyPress' вызывается перед обновлением« Текста », что затрудняет определение того, каким будет результат« Text ». – Smallhacker
А как насчет события 'OnLostFocus' в элементе управления? –