Я пытаюсь установить флаг, указывающий, было ли последнее изменение в свойстве Checked
вызвано пользователем или программой.
Я использую пользовательский RadioButton
:
public class MyRadioButton : RadioButton
{
ValueChanger valueChanger = ValueChanger.Program;
public MyRadioButton()
{
this.Click += OnButtonClickedByUser;
this.CheckedChanged += OnCheckChange;
}
public void setChecked(bool val)
{
this.valueChanger = ValueChanger.Program;
this.Checked = val;
}
void OnButtonClickedByUser(Object sender, EventArgs e)
{
this.valueChanger = ValueChanger.User;
}
void OnCheckChange(Object sender, EventArgs e)
{
// do stuff depending on 'this.valueChanger'
}
enum ValueChanger
{
User,
Program
};
}
Я вызываю setChecked
всякий раз, когда значение изменяется из-за сообщения, полученного от последовательного соединения, и я ожидаю, что OnButtonClickedByUser
будет вызываться событием Click
всякий раз, когда значение изменяется через пользовательский интерфейс.
Моя проблема в том, что событие CheckedChanged
срабатывает до события Click
, что делает OnCheckChange
ненадежным.
Есть ли способ исправить это?