加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 07:49:42 所属栏目:百科 来源:网络整理
导读:我看到复选框有一个CheckedChanged事件.是否可以判断是否以编程方式更改,或者由用户实际检查复选框? 我有一个大型网格,用户可以在其中输入过滤器,或者使用一些提供常见过滤参数的“快速过滤器”复选框.然后说他们去通过文本框修改过滤器,我正在检查是否应该
我看到复选框有一个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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读