【问题标题】:Checkbox not removing items if unchecked - C# WPF如果未选中,复选框不会删除项目 - C# WPF
【发布时间】:2009-12-16 08:45:28
【问题描述】:

如果未选中,我表单中的 CheckBox 根本不会从列表框中删除项目,即使我在正确的事件中有它

private void WWW_checkbox_Checked(object sender, RoutedEventArgs e)
{
    packagelist_listbox.Items.Remove(SelectaCategory_listbox);
    LoadPackageList.Load("www.xml");
    XmlNodeList WWWPackageList = LoadPackageList.SelectNodes("/Packages/*");
    int countthenodes = 0;



    //Removes the text "Select A Category" and refrehes the form

    foreach (XmlNode WWWPackages in WWWPackageList)
    {


        //Adds each attribute to the apropriate variable
        WWWPackageTitle.Add(WWWPackages.Attributes["title"].Value.ToString());
        WWWPackageInfoPage.Add(WWWPackages.Attributes["infopage"].Value.ToString());
        WWWPackageDLURL.Add(WWWPackages.Attributes["dlurl"].Value.ToString());
        WWWPackageID.Add(WWWPackages.Attributes["id"].Value.ToString());
        if (WWW_checkbox.IsChecked == true)
        {
            packagelist_listbox.Items.Add(WWWPackageTitle[countthenodes]);
        }


        countthenodes++;
    }
    packagelist_listbox.Items.Refresh();
    Refresh(packagelist_listbox);
}





private void WWW_checkbox_Click(object sender, RoutedEventArgs e)
{

    if (WWW_checkbox.IsChecked == false)
    {
        foreach (string EachPackageWWW in WWWPackageTitle)
        {
            packagelist_listbox.Items.Remove(packagelist_listbox.Items.Contains(EachPackageWWW));
        }
    }
    packagelist_listbox.Items.Refresh();
    Refresh(packagelist_listbox);




}

刷新正常工作,因为它会在您每次检查时将相同的内容添加到列表框

【问题讨论】:

    标签: c# wpf listbox checkbox


    【解决方案1】:

    问题出在这一行:

    packagelist_listbox.Items.Remove(packagelist_listbox.Items.Contains(EachPackageWWW));
    

    如果你把它分开,它会这样做:

    bool doesListContainsPackage = packagelist_listbox.Items.Contains(EachPackageWWW);
    packagelist_listbox.Items.Remove(doesListContainPackage);
    

    即您正在删除 Contains(item) 方法的布尔 result,而不是项目本身。

    将其更改为:

    packagelist_listbox.Items.Remove(EachPackageWWW);
    

    if (packagelist_listbox.Items.Contains(EachPackageWWW))
      packagelist_listbox.Items.Remove(EachPackageWWW));
    

    如果你想非常谨慎。

    顺便说一句,您可能需要考虑使用 Unchecked 事件(为了与 Checked 对称)而不是 Click 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多