如何从包含多个对象的列表中删除从列表框中选择的项目?
How to remove an item selected from a listbox from a list containing multiple objects?
我希望用户能够 select 列表框中的项目,然后按删除按钮,以便从列表框和 allFlights 列表中删除该项目。我怎样才能更改我的代码,以便它也从 allFlights 列表中删除该项目?
public partial class Form1 : Form
{
public List<Flight> allFlights;
public Form1()
{
InitializeComponent();
allFlights = new List<Flight>();
Flight flight1 = new Flight("BA431", "Newcastle", "13:00");
Flight flight2 = new Flight("KL126", "Manchester", "16:00");
Flight flight3 = new Flight("CD230", "London", "14:00");
allFlights.Add(flight1);
allFlights.Add(flight2);
allFlights.Add(flight3);
allFlights.Sort();
DisplayArrivals();
}
public void DisplayArrivals()
{
foreach (Flight f in allFlights)
{
lstArrivals.Items.Add(f.ToString());
}
}
private void btnDeleteF_Click(object sender, EventArgs e)
{
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
}
}
}
这应该可以解决问题:
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
allFlights.Remove(lstArrivals.Items[lstArrivals.SelectedIndices[i]]);
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
}
在您的 DisplayArrivals()
方法中,不要将 f.ToString()
添加到您的列表框,而是添加 Flight
实例本身,如 lstArrivals.Items.Add(f)
:
public void DisplayArrivals()
{
foreach (Flight f in allFlights)
{
lstArrivals.Items.Add(f); // <-- add the Flight instance itself
}
}
确保为您的 Flight
class 覆盖 ToString()
以控制它在列表框中的显示方式。
然后您可以将所选项目转换回 Flight 实例并使用该引用将其从您的列表中删除:
private void btnDeleteF_Click(object sender, EventArgs e)
{
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
Flight f = lstArrivals.Items[lstArrivals.SelectedIndices[i]] as Flight;
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
allFlights.Remove(f);
// ... possibly do something else with "f" ...
}
}
我希望用户能够 select 列表框中的项目,然后按删除按钮,以便从列表框和 allFlights 列表中删除该项目。我怎样才能更改我的代码,以便它也从 allFlights 列表中删除该项目?
public partial class Form1 : Form
{
public List<Flight> allFlights;
public Form1()
{
InitializeComponent();
allFlights = new List<Flight>();
Flight flight1 = new Flight("BA431", "Newcastle", "13:00");
Flight flight2 = new Flight("KL126", "Manchester", "16:00");
Flight flight3 = new Flight("CD230", "London", "14:00");
allFlights.Add(flight1);
allFlights.Add(flight2);
allFlights.Add(flight3);
allFlights.Sort();
DisplayArrivals();
}
public void DisplayArrivals()
{
foreach (Flight f in allFlights)
{
lstArrivals.Items.Add(f.ToString());
}
}
private void btnDeleteF_Click(object sender, EventArgs e)
{
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
}
}
}
这应该可以解决问题:
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
allFlights.Remove(lstArrivals.Items[lstArrivals.SelectedIndices[i]]);
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
}
在您的 DisplayArrivals()
方法中,不要将 f.ToString()
添加到您的列表框,而是添加 Flight
实例本身,如 lstArrivals.Items.Add(f)
:
public void DisplayArrivals()
{
foreach (Flight f in allFlights)
{
lstArrivals.Items.Add(f); // <-- add the Flight instance itself
}
}
确保为您的 Flight
class 覆盖 ToString()
以控制它在列表框中的显示方式。
然后您可以将所选项目转换回 Flight 实例并使用该引用将其从您的列表中删除:
private void btnDeleteF_Click(object sender, EventArgs e)
{
for (int i = lstArrivals.SelectedIndices.Count - 1; i >= 0; i--)
{
Flight f = lstArrivals.Items[lstArrivals.SelectedIndices[i]] as Flight;
lstArrivals.Items.RemoveAt(lstArrivals.SelectedIndices[i]);
allFlights.Remove(f);
// ... possibly do something else with "f" ...
}
}