Reputation: 419
i currently trying to view all the files and folder selected by the user in a listbox. At the Moment i am able to list what the user have chosen using the openfiledialogue HOWEVER i am now facing prob when i try to remove it form the listbox. i trying to allow the user to click on the checkbox beside the file and press the remove button to remove it
this is my code for remove button
private void button2_Click(object sender, EventArgs e)
{
for (int i = listView1.SelectedItems.Count - 1; i >= 0; i--)
{
listView1.Items.Remove(listView1.SelectedItems[i]);
}
}
this is the add file to listbox for reference jsut in case
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);
}
}
}
and i pressed the remove button nothing happen and i saw some answer on google on the using of selectionmode but when i used that, my listbox does not have the property of selectionmode and have red lines underlined
Upvotes: 2
Views: 52527
Reputation: 1
$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
Upvotes: -2
Reputation: 1
while (listView1.SelectedItems.Count > 0)
{
listView1.Items.Remove(listView1.SelectedItems[0]);
}
Upvotes: 0
Reputation: 6802
Instead of using listView1.SelectedItems
use listView1.CheckedItems
and change your button2_click
to:
private void button2_Click(object sender, EventArgs e)
{
foreach (ListViewItem i in listView1.CheckedItems)
listView1.Items.Remove(i);
}
Upvotes: 5
Reputation: 30097
Try this
private void button2_Click(object sender, EventArgs e)
{
for(int i = 0 ; i < listView1.SelectedItems.Count; i ++)
listView1.Items.Remove(listView1.SelectedItems[i]);
}
Upvotes: 0
Reputation: 4929
Your problem is because the SelectedItems
property is actually a reference to Items
collection and you change the collection while iterating through it.
try the following code
listView1.BeginUpdate();
ArrayList vSelectedItems = new ArrayList(listView1.SelectedItems);
foreach (string item in vSelectedItems)
{
listView1.Items.Remove(item);
}
listView1.EndUpdate();
the BeginUpdate()
and EndUpdate()
methods will optimize the performance of this action - the listView will not refresh itself during activities between these methods call.
Upvotes: 13