我的winform 应用程序在一周中的每一天都有一个列表视图。每个列表视图(listSun,listMon,listTue等(都有一个当天的任务列表。我可以通过专门说明列表来删除该项目,但我无法通过选择使其工作。
我希望用户能够单击任何一天的项目,并使用简单的功能确定选择了哪个列表并删除了所选项目。
我目前尝试的逻辑是 Foreach 列表视图 在表单中删除所选项目。 这是我到目前为止尝试的代码。
private void btnDelete_Click(object sender, EventArgs e)
{
foreach (ListView listview in this.Controls)
{
foreach (ListViewItem listitem in listview.SelectedItems)
listitem.Remove();
}
当然这是行不通的,但我愿意接受修复或采取其他路线的建议。
这个怎么样?
首先,为 Form 类创建属性。
private ListView selectedListView {get; set;}
当用户选择某个项作为列表视图时,将其设置为属性。
// ListView Clicked Event
var userSelected = (ListView)sender;
if(userSelected.SelectedItem != null)
selectedListView = (ListView)sender;
并使用 selectedListView.Items.Remove(( 删除 SelectedItem。
此错误的原因是:
foreach (ListView listview in this.Controls)
{
foreach (ListViewItem listitem in listview.SelectedItems)
listitem.Remove();
}
Foreach 循环在内部将集合的项强制转换为左侧变量类型(在本例中为列表视图(。
所以发生的事情是...您在this. Controls
内部有不同的控件,例如标签,分组框等...当您像这样尝试 foreach 并点击该控件集合中的标签时,foreach 循环会尝试将标签强制转换为 listview,但会失败。
你可以用一些linq来解决这个问题,方法是将你的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();
}