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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |