c#Winform从表单中的多个列表视图中删除所选项目

时间:2017-03-23 02:33:03

标签: c# winforms listview

我的winform应用程序有一周的每一天的列表视图。每个列表视图(listSun,listMon,listTue等)都有一天的任务列表。我可以通过明确说明列表来删除该项目,但我无法通过选择来使其工作。

我希望用户能够从任何一天点击某个项目,并使用简单的功能确定选择了哪个列表并删除所选项目。

我正在尝试的逻辑是Foreach listview在表单中删除所选项目。这是迄今为止我尝试过的代码。

  private void btnDelete_Click(object sender, EventArgs e)
        {

            foreach (ListView listview in this.Controls)
            {
                foreach (ListViewItem listitem in listview.SelectedItems)
                    listitem.Remove();
            }

当然这不起作用,但我愿意修改建议或采取其他途径。

2 个答案:

答案 0 :(得分:1)

这个怎么样?

首先,为Form类创建属性。

private ListView selectedListView {get; set;}

当用户选择其中一个ListView时,将其设置为属性。

// ListView Clicked Event
var userSelected = (ListView)sender;
if(userSelected.SelectedItem != null)
    selectedListView = (ListView)sender;

并使用selectedListView.Items.Remove()删除SelectedItem。

答案 1 :(得分:1)

出现此错误的原因是:

   foreach (ListView listview in this.Controls)
            {
                foreach (ListViewItem listitem in listview.SelectedItems)
                    listitem.Remove();
            }

Foreach循环内部将集合的项目强制转换为左侧变量类型 (在本例中为ListView)。

所以会发生什么......你在this. Controls内有不同的控件,比如标签,组合框等...... 当你尝试这样的foreach,并在该控件集合中点击一个标签时,foreach循环会尝试将标签转换为listview,然后失败。

您可以通过将this.Controls foreach替换为:

来解决这个问题
foreach (ListView listview in this.Controls.OfType<Control>().
Where(c => c.GetType() == typeof(ListView)))
 {
      foreach (ListViewItem listitem in listview.SelectedItems)
      listitem.Remove();
 }