[英]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.