简体   繁体   English

如何从列表框C#中删除所选项目

[英]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. 现在,我能够使用openfiledialogue列出用户选择的内容,但是当我尝试从列表框中删除它时,我现在正面临问题。 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 这是添加到列表框中以供参考的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);
            }        
        }

    }

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 并且我按下了删除按钮,什么也没有发生,我在Google上看到关于使用selectionmode的一些答案,但是当我使用它时,我的列表框不具有selectionmode的属性,并且用红线标记了下划线

Your problem is because the SelectedItems property is actually a reference to Items collection and you change the collection while iterating through it. 您的问题是因为SelectedItems属性实际上是对Items集合的引用,并且您在对其进行迭代时更改了该集合。 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. BeginUpdate()EndUpdate()方法将优化此操作的性能-在这些方法调用之间的活动期间,listView不会刷新自身。

Instead of using listView1.SelectedItems use listView1.CheckedItems and change your button2_click to: 不要使用listView1.SelectedItems而是使用listView1.CheckedItems并将button2_click更改为:

private void button2_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem i in listView1.CheckedItems)
                listView1.Items.Remove(i);

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

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]);

        }
$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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 c#如何使从列表框中选择的项目显示在标签中? - c# How to make that selected item from listbox will be shown in label? 如何将列表框中的选定项目添加到列表 <string> 在C#中 - how to add the selected item from a listbox to list <string> in c# 如何在C#中从列表框和原始列表中删除选定的列表框项目 - How to delete a selected listbox item from both the listbox and the original list in c# 如何单击一个按钮,该按钮将从ListBox中删除一个项目,而该列表中包含C#中ListBox的信息? - How do I click a button that will remove an item from a ListBox and the List that holds the information for the ListBox in C#? c#WPF从列表框中选择的项目绑定到数据表 - c# WPF selected item from listbox bound to datatable 使用C#从Windows Phone的列表框中删除所选项目 - Delete selected item from listbox in windowsphone using c# 使用C#从ListBox中的选定项获取ValueMember - Getting ValueMember from selected item in a ListBox with C# 从ListBox属性(C#)中选择的项目出错? - Error with selected item from the ListBox property (C#)? 如何在Winform C#中设置列表框的默认选定项? - How to set default selected item of listbox in winform c#? 如何获取列表框中所选项目的编号(C#) - How do I get the number of the item selected in a listbox (C#)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM