微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – Windows窗体复选框已更改vs已更新?

是否可以在C# Windows窗体中区分通过用户点击切换的复选框和源自另一个事件的更新?

我有一个值列表框和一个复选框,其中包含有关列表框中项目的是/否信息.当选择列表框中的项目时,我想更新复选框及其信息.复杂性来自其中一个复选框表示唯一状态,即只允许列表框中的一个项目具有的状态.如果用户在处于未选中状态时单击该复选框,我希望它为当前所选项目设置字段为true,对于之前保持为true的项目,设置为false.

据我了解,CheckedChanged事件将触发列表框选择更改(设置该项目的复选框值)和用户单击.我需要一种方法将它们分开.

我怎么做?

解决方法

As I understand it,the CheckedChanged event will fire on both the
listBox selection change (setting the checkBox values for that item)
AND on the user click. I need a way to split them out.

是的,你是对的,当你更新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
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐