我目前正在尝试查看用户在列表框中选择的所有文件和文件夹。在片刻我能够列出用户使用openfiledialogue选择的内容,但是当我尝试从列表框中删除它时,我现在面临的问题。我试图让用户点击文件旁边的复选框,然后按下删除按钮将其删除
这是我删除按钮的代码
private void button2_Click(object sender, EventArgs e)
{
for (int i = listView1.SelectedItems.Count - 1; i >= 0; i--)
{
listView1.Items.Remove(listView1.SelectedItems[i]);
}
}
这是列表框的添加文件,用于参考jsut,以防
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openfiledialog = new OpenFileDialog();
// Display open file dialog
openfiledialog.InitialDirectory = "C:\\";
//openfiledialog.Multiselect = true;
openfiledialog.Title = "Lock File";
openfiledialog.Filter = "All Files | *.*";
openfiledialog.ShowDialog();
if (openfiledialog.FileName != "")
{
//move through FileInfo array and store in new array of fi
listView1.Items.Clear();
foreach (string file in openfiledialog.FileNames)
{
listView1.Items.Add(file);
}
}
}
我按下删除按钮什么都没发生,我在google上看到了一些关于使用selectionmode的答案但是当我使用它时,我的列表框没有selectionmode的属性并且有红线加下划线
答案 0 :(得分:9)
您的问题是因为SelectedItems
属性实际上是对Items
集合的引用,您在迭代它时更改了集合。
尝试以下代码
listView1.BeginUpdate();
ArrayList vSelectedItems = new ArrayList(listView1.SelectedItems);
foreach (string item in vSelectedItems)
{
listView1.Items.Remove(item);
}
listView1.EndUpdate();
BeginUpdate()
和EndUpdate()
方法将优化此操作的性能 - 在这些方法调用之间的活动期间,listView不会自行刷新。
答案 1 :(得分:5)
而不是使用listView1.SelectedItems
使用listView1.CheckedItems
并将button2_click
更改为:
private void button2_Click(object sender, EventArgs e)
{
foreach (ListViewItem i in listView1.CheckedItems)
listView1.Items.Remove(i);
}
答案 2 :(得分:0)
试试这个
private void button2_Click(object sender, EventArgs e)
{
for(int i = 0 ; i < listView1.SelectedItems.Count; i ++)
listView1.Items.Remove(listView1.SelectedItems[i]);
}
答案 3 :(得分:0)
while (listView1.SelectedItems.Count > 0)
{
listView1.Items.Remove(listView1.SelectedItems[0]);
}
答案 4 :(得分:-2)
$x = @()
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "hello first"
$objForm.Size = New-Object System.Drawing.Size(600,600)
$objForm.StartPosition = "CenterScreen"
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter")
{
foreach ($objItem in $objListbox.SelectedItems)
{$x += $objItem}
$objForm.Close()
}
})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$objForm.Close()}})
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Size(10,250)
$OKButton.Size = New-Object System.Drawing.Size(85,30)
$OKButton.Text = "Start Check"
$MoveRight = New-Object System.Windows.Forms.Button
$MoveRight.Location = New-Object System.Drawing.Size(200,80)
$MoveRight.Size = New-Object System.Drawing.Size(70,20)
$MoveRight.Text = ">>"
$objForm.Controls.Add($MoveRight)
$MoveRight.Add_Click(
{
foreach ($objItem in $objListbox.SelectedItems)
{[void] $objListbox2.Items.Add($objItem)}
$selectedItems = $objListbox.SelectedItems;
if ($objListbox.SelectedIndex -ne -1)
{
for ($i = $selectedItems.Count - 1; $i -ge 0; $i--){$objListbox.Items.Remove($SelectedItems[$i])}
}
})
$MoveLeft = New-Object System.Windows.Forms.Button
$MoveLeft.Location = New-Object System.Drawing.Size(200,120)
$MoveLeft.Size = New-Object System.Drawing.Size(70,20)
$MoveLeft.Text = "<<"
$objForm.Controls.Add($MoveLeft)
$MoveLeft.Add_Click(
{
foreach ($objItem in $objListbox2.SelectedItems)
{[void] $objListbox.Items.Add($objItem)
}
$selectedItems = $objListbox2.SelectedItems;
if ($objListbox2.SelectedIndex -ne -1)
{
for ($i = $selectedItems.Count - 1; $i -ge 0; $i--){$objListbox2.Items.Remove($SelectedItems[$i])}
}
})
$Clearconsole = New-Object System.Windows.Forms.Button
$Clearconsole.Location = New-Object System.Drawing.Size(505,320)
$Clearconsole.Size = New-Object System.Drawing.Size(70,20)
$Clearconsole.Text = "Clr console"
$objForm.Controls.Add($Clearconsole)
$Clearconsole.Add_Click(
{
$outputBox.Clear()
})
$MoveAll = New-Object System.Windows.Forms.Button
$MoveAll.Location = New-Object System.Drawing.Size(200,160)
$MoveAll.Size = New-Object System.Drawing.Size(70,20)
$MoveAll.Text = "ALL"
$objForm.Controls.Add($MoveAll)
$MoveAll.Add_Click(
{
foreach ($objItem in $objListbox.Items)
{[void] $objListbox2.Items.Add($objItem)}
$objListbox.Items.Clear()
$outputBox.text="test"
})
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,320)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "Console Window"
$objForm.Controls.Add($objLabel)
$outputBox = New-Object System.Windows.Forms.TextBox
$outputBox.Location = New-Object System.Drawing.Size(10,350)
$outputBox.Size = New-Object System.Drawing.Size(565,200)
$outputBox.MultiLine = $True
$outputBox.ScrollBars = "Vertical"
$objForm.Controls.Add($outputBox)
$OKButton.Add_Click(
{
foreach ($objItem in $objListbox.SelectedItems)
{$x += $objItem}
$objForm.Close()
})
$objForm.Controls.Add($OKButton)
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(280,20)
$objLabel.Text = "Please make a selection from the list below:"
$objForm.Controls.Add($objLabel)
$objListbox = New-Object System.Windows.Forms.Listbox
$objListbox.Location = New-Object System.Drawing.Size(10,40)
$objListbox.Size = New-Object System.Drawing.Size(160,20)
$objListbox.SelectionMode = "MultiExtended"
[void] $objListbox.Items.Add("a")
[void] $objListbox.Items.Add("b")
[void] $objListbox.Items.Add("c")
[void] $objListbox.Items.Add("d")
[void] $objListbox.Items.Add("e")
$objListbox.Height = 200
$objListBox.Sorted = $True
$objForm.Controls.Add($objListbox)
$objForm.Topmost = $True
$objListbox2 = New-Object System.Windows.Forms.Listbox
$objListbox2.Location = New-Object System.Drawing.Size(315,40)
$objListbox2.Size = New-Object System.Drawing.Size(160,20)
$objListbox2.SelectionMode = "MultiExtended"
$objListbox2.Height = 200
$objListBox2.Sorted = $True
$objForm.Controls.Add($objListbox2)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
$x