c# – Windows窗体复选框已更改vs已更新?
是否可以在C#
Windows窗体中区分通过用户点击切换的复选框和源自另一个事件的更新?
我有一个值列表框和一个复选框,其中包含有关列表框中项目的是/否信息.当选择列表框中的项目时,我想更新复选框及其信息.复杂性来自其中一个复选框表示唯一状态,即只允许列表框中的一个项目具有的状态.如果用户在处于未选中状态时单击该复选框,我希望它为当前所选项目设置字段为true,对于之前保持为true的项目,设置为false. 据我了解,CheckedChanged事件将触发列表框选择更改(设置该项目的复选框值)和用户单击.我需要一种方法将它们分开. 我怎么做? 解决方法
是的,你是对的,当你更新checkBox状态时会引发CheckedChanged事件(当你猜测ListBox.SelectedIndexChanged事件或类似的东西时你会这样做). 您需要的是在更新CheckBox状态之前禁用处理程序. private void myListBox_SelectedIndexChanged(object sender,System.EventArgs e) { //disable checkbox event mycheckbox.CheckedChanged -= mycheckbox_CheckedChanged; //you can change the checkbox state here //... //Activate event mycheckbox.CheckedChanged += myListBox_SelectedIndexChanged; } private void mycheckbox_CheckedChanged(object sender,System.EventArgs e) { //(...) } 另一种可能的模式是使用标志,因此在您通过代码更新复选框状态期间不要监听CheckedChanged事件. private bool flagactivated = true; private void myListBox_SelectedIndexChanged(object sender,System.EventArgs e) { //disable checkbox event flagactivated = false; //Do stuff //(...) //Activate event flagactivated = true; } private void mycheckbox_CheckedChanged(object sender,System.EventArgs e) { if (flagactivated) { //do stuff } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |