在单选按钮中检测更改源(用户或程序)

我正在尝试设置一个标志,说明该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通过 UI 更改值时由事件调用。


我的问题是CheckedChanged事件在事件之前触发Click,这使得OnCheckChange不可靠。


有什么办法可以解决这个问题吗?


蝴蝶不菲
浏览 121回答 1
1回答

RISEBY

用户可以RadioButton通过单击控件或将焦点移动到控件(箭头键、选项卡、助记键组合)来更改 的值。双方OnEnter并ProcessMnemonic尝试拨打PerformClick该电话OnClick,其负责人向检查控制。所以你可以覆盖OnClick方法:protected override void OnClick(EventArgs e) {    // Here CheckedChanged event has not been raised yet    base.OnClick(e);}要了解有关RadioButton内部工作原理的更多信息,请查看其源代码。
打开App,查看更多内容
随时随地看视频慕课网APP