我的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();
}
当然这不起作用,但我愿意修改建议或采取其他途径。
答案 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();
}