以编程方式清空列表框

时间:2013-10-22 10:32:30

标签: c# winforms listbox

我想在每次点击listbox按钮时清除addImages,这会向其中添加新项目但我在清除时遇到问题。以下是我的代码:

private void addImages_Click(object sender, RoutedEventArgs e)
{ 
    FileInfo Images;
    string[] filenames = null;
    System.Windows.Forms.FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog();
    folderDlg.ShowNewFolderButton = true;
    System.Windows.Forms.DialogResult result = folderDlg.ShowDialog();

    if (result == System.Windows.Forms.DialogResult.OK)
    {
        filenames = System.IO.Directory.GetFiles(folderDlg.SelectedPath);

        foreach (string image in filenames)
        {
            Images = new FileInfo(image);

            if(Images.Extension.ToLower() == ".png" || Images.Extension.ToLower() == ".jpg" || Images.Extension.ToLower() == ".gif" || Images.Extension.ToLower() == ".jpeg" || Images.Extension.ToLower() == ".bmp" || Images.Extension.ToLower() == ".tif")
            {
                ImageList.Items.Add(new LoadImages(new BitmapImage(new Uri(image))));
            }
        }
    }
}

我已经尝试了ImageList.items.clear()BindingOperations.ClearAllBindings(ImageList)但是这些项目只有在下次点击按钮时才会首次删除项目,因为它们不会清除列表。我希望每次单击按钮时清除列表。

3 个答案:

答案 0 :(得分:0)

ListBox.Items.Clear应清除列表,如果您需要在时间点击该按钮,那么您需要在事件处理程序中使用它,即

private void addImages_Click(object sender, RoutedEventArgs e)
{
    listBox.Items.Clear();
    // do stuff
}

答案 1 :(得分:0)

试试这个..

ImageList.Images.Clear();
listBox.Items.Clear();

答案 2 :(得分:0)

以下代码应该可以正常使用。唯一可能有问题的事情

private void addImages_Click(object sender, RoutedEventArgs e)
{ 
    ImageList.Items.Clear();
    RefreshList();

    FileInfo Images;
    string[] filenames = null;
    System.Windows.Forms.FolderBrowserDialog folderDlg = new System.Windows.Forms.FolderBrowserDialog();
    folderDlg.ShowNewFolderButton = true;
    System.Windows.Forms.DialogResult result = folderDlg.ShowDialog();

    if (result == System.Windows.Forms.DialogResult.OK)
    {
        filenames = System.IO.Directory.GetFiles(folderDlg.SelectedPath);

        foreach (string image in filenames)
        {
            Images = new FileInfo(image);

            if(new string[]{".png", ".jpg", ".gif", ".jpeg", ".bmp", ".tif"}.Contains(Images.Extension.ToLower()))
            {
                ImageList.Items.Add(new LoadImages(new BitmapImage(new Uri(image))));
            }
        }
    }

    RefreshList();
}

private void RefreshList()
{
    // Force visual refresh of control
    ImageList.Refresh();
}

*注意我清理了扩展验证

编辑:我刚刚注意到你在谈论Bindings。那么你的问题很容易。您无法清除绑定到控件的列表。控件将保留原始来源。您只能更新绑定源,否则需要手动更新绑定。

收藏就像攀登一样。

控制是人 绳索是DataSource(集合) 山是你的模范

如果在您的模型中清除(切割)源(所有绳索) 控制(人)仍持有源(绳索)

如果您希望控件(人)拥有新来源(绳索) 你需要添加一个新的,所以他可以跳过它去删除旧的。