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

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

发布时间:2020-12-15 21:56:09 所属栏目:百科 来源:网络整理
导读:是否可以在C# Windows窗体中区分通过用户点击切换的复选框和源自另一个事件的更新? 我有一个值列表框和一个复选框,其中包含有关列表框中项目的是/否信息.当选择列表框中的项目时,我想更新复选框及其信息.复杂性来自其中一个复选框表示唯一状态,即只允许列表
是否可以在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
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读