Zi Ming
Zi Ming

Reputation: 419

How to Remove selected item from listbox C#

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

Answers (5)

ajay
ajay

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

Ozan
Ozan

Reputation: 1

while (listView1.SelectedItems.Count > 0)
{
    listView1.Items.Remove(listView1.SelectedItems[0]);
}

Upvotes: 0

Waqas
Waqas

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

Haris Hasan
Haris Hasan

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

NirMH
NirMH

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

Related Questions