Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测单选按钮中的更改源(用户或程序)_C#_.net_Winforms_Radio Button - Fatal编程技术网

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

C# 检测单选按钮中的更改源(用户或程序),c#,.net,winforms,radio-button,C#,.net,Winforms,Radio Button,我试图设置一个标志,说明Checked属性的最后一次更改是由用户还是程序引起的 我正在使用自定义的单选按钮: public class MyRadioButton : RadioButton { ValueChanger valueChanger = ValueChanger.Program; public MyRadioButton() { this.Click += OnButtonClickedByUser; this.Checke

我试图设置一个标志,说明
Checked
属性的最后一次更改是由用户还是程序引起的

我正在使用自定义的
单选按钮

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
,每当值通过UI更改时,我希望
OnButtonClickedByUser
事件调用
Click

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


有没有办法解决这个问题?

用户可以通过单击控件或将焦点移动到控件(箭头键、制表符、助记键组合)来更改
单选按钮的值

OnEnter
ProcessMnemonic
都尝试调用
PerformClick
,后者调用负责检查控件的
OnClick
。因此,您可以覆盖
OnClick
方法:

protected override void OnClick(EventArgs e) 
{
    // Here CheckedChanged event has not been raised yet

    base.OnClick(e);
}

要了解更多有关
RadioButton
如何在内部工作的信息,请查看其。

对我来说,它似乎是一个很好的解决方案。无论如何,我分享了答案,你可能会发现它很有用。XY问题部分很有趣,而且绝对相关。除了修复我尝试的解决方案之外,我还应该询问其他方法。当前格式的问题已经足够好了。通过谈论XY问题,我只是分享了我对X的猜测和好奇。如果出于任何原因,你想问关于X的问题,最好用另一个帖子提问:)