c# – 区分用户更改Checkbox.Checked值,或以编程方式更改

前端之家收集整理的这篇文章主要介绍了c# – 区分用户更改Checkbox.Checked值,或以编程方式更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到复选框有一个CheckedChanged事件.是否可以判断是否以编程方式更改,或者由用户实际检查复选框?

我有一个大型网格,用户可以在其中输入过滤器,或者使用一些提供常见过滤参数的“快速过滤器”复选框.然后说他们去通过文本框修改过滤器,我正在检查是否应该以编程方式(un)检查CheckBox控件,以便它反映在文本框中的过滤器.

private void genericCheckBox_CheckedChanged(object sender,EventArgs e)
    {
        UpdateFilter();
    }

    private void UpdateFilter()
    {
        if (gdcSVNDefaultView.RowCount == 0)
            return;

        gdcSVNDefaultView.ActiveFilterString = BuildTableFilter();
        gdcSVNDefaultView.BestFitColumns();
    }

    private void gdcSVNDefaultView_ColumnFilterChanged(object sender,EventArgs e)
    {
        lblTotalFileCount.Text = gdcSVNDefaultView.RowCount.ToString();

        if (gdcSVNDefaultView.ActiveFilterString.Contains("Normal"))
            cheNormalFiles.Checked = true;
        else
            cheNormalFiles.Checked = false;

        if (gdcSVNDefaultView.ActiveFilterString.Contains("bin") || 
            gdcSVNDefaultView.ActiveFilterString.Contains("obj"))
            cheBinObjFolders.Checked = true;
        else
            cheBinObjFolders.Checked = false;
    }

通过一些非常轻的测试,这似乎就像我想要的那样工作.但是担心CheckedChanged事件发生时调用UpdateFilter方法会导致ColumnFilterChanged事件触发,这可能会导致CheckedChange再次发生,因为ColumnFilterChanged操作了复选框.

解决方法

我可能会分离,然后重新连接处理程序,例如
private void gdcSVNDefaultView_ColumnFilterChanged(object sender,EventArgs e)
{
    cheNormalFiles.CheckedChanged -= genericCheckBox_CheckedChanged;
    cheBinObjFolders.CheckedChanged -= genericCheckBox_CheckedChanged;

    // do stuff...

    cheNormalFiles.CheckedChanged += genericCheckBox_CheckedChanged;
    cheBinObjFolders.CheckedChanged += genericCheckBox_CheckedChanged;
}

猜你在找的C#相关文章