C# 查找列表框中所有项目的选定状态
C# Find the Selected State of all items in a ListBox
我找到了很多关于如何在列表框中查找所选项目以及如何遍历列表框的示例;
for(int index=0;index < listBox1.Items.Count; index++)
{
MessageBox.Show(listBox1.Items[index].ToString();
}
或
foreach (DataRowView item in listBox1.Items)
{
MessageBox.Show(item.Row["ID"].ToString() + " | " + item.Row["bus"].ToString());
}
虽然这些方法对选定的项目很有效,但我还没有弄清楚或发现的是如何获得列表框中每个项目的选定状态、选定和未选定状态,如上仅给出被选中的。
基本上,我需要这样的东西;
for(int index=0;index < listBox1.Items.Count; index++)
{
if (index.SelectedMode == SelectedMode.Selected)
{
MessageBox.Show(listBox1.Items[index].ToString() +"= Selected";
}
else
{
MessageBox.Show(listBox1.Items[index].ToString() +"= Unselected";
}
}
我找到了一个片段,据说使用 (listBox1.SelectedIndex = -1) 来确定所选状态,但是我还没有想出或找到如何围绕它构建一个循环来检查每个项目在列表框中。
我还读到我应该将列表框项目放入一个数组中,但同样没有关于获取列表框中每个项目的选定状态。
我知道我必须遍历列表框来完成我需要的,很确定它会是上述循环之一,但是我还没有找到如何提取每个循环的选定状态列表框中的项目。
我正在使用 VS2013、C# Windows 窗体、.NET Framework 4.0
提前感谢任何 advice/direction.
可以使用ListBox
的GetSelected
方法。它 returns 一个值,指示指定的项目是否被选中。
例如,如果选择索引 0 处的项目(第一项),则以下代码将 selected
的值设置为 true
:
var selected = listBox1.GetSelected(0);
例子
以下循环,显示每个项目的消息框,显示项目文本和项目选择状态:
for (int i = 0; i < listBox1.Items.Count; i++)
{
var text = listBox1.GetItemText(listBox1.Items[i]);
var selected = listBox1.GetSelected(i);
MessageBox.Show(string.Format("{0}:{1}", text, selected ? "Selected" : "Not Selected"));
}
这将为您提供未选择的项目:
List<string> unselected = listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>());
您可以像这样遍历该列表:
foreach(string str in listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>()))
{
System.Diagnostics.Debug.WriteLine($"{str} = Not selected");
}
我假设您使用 string
作为项目类型。如果您想使用其他东西,只需将 string
替换为您的类型,它应该仍然有效。
然后循环遍历未选择的项目以对它们执行任何操作,然后循环遍历 listBox1.SelectedItems
以对选定的项目执行任何操作。
我找到了很多关于如何在列表框中查找所选项目以及如何遍历列表框的示例;
for(int index=0;index < listBox1.Items.Count; index++)
{
MessageBox.Show(listBox1.Items[index].ToString();
}
或
foreach (DataRowView item in listBox1.Items)
{
MessageBox.Show(item.Row["ID"].ToString() + " | " + item.Row["bus"].ToString());
}
虽然这些方法对选定的项目很有效,但我还没有弄清楚或发现的是如何获得列表框中每个项目的选定状态、选定和未选定状态,如上仅给出被选中的。 基本上,我需要这样的东西;
for(int index=0;index < listBox1.Items.Count; index++)
{
if (index.SelectedMode == SelectedMode.Selected)
{
MessageBox.Show(listBox1.Items[index].ToString() +"= Selected";
}
else
{
MessageBox.Show(listBox1.Items[index].ToString() +"= Unselected";
}
}
我找到了一个片段,据说使用 (listBox1.SelectedIndex = -1) 来确定所选状态,但是我还没有想出或找到如何围绕它构建一个循环来检查每个项目在列表框中。
我还读到我应该将列表框项目放入一个数组中,但同样没有关于获取列表框中每个项目的选定状态。
我知道我必须遍历列表框来完成我需要的,很确定它会是上述循环之一,但是我还没有找到如何提取每个循环的选定状态列表框中的项目。
我正在使用 VS2013、C# Windows 窗体、.NET Framework 4.0 提前感谢任何 advice/direction.
可以使用ListBox
的GetSelected
方法。它 returns 一个值,指示指定的项目是否被选中。
例如,如果选择索引 0 处的项目(第一项),则以下代码将 selected
的值设置为 true
:
var selected = listBox1.GetSelected(0);
例子
以下循环,显示每个项目的消息框,显示项目文本和项目选择状态:
for (int i = 0; i < listBox1.Items.Count; i++)
{
var text = listBox1.GetItemText(listBox1.Items[i]);
var selected = listBox1.GetSelected(i);
MessageBox.Show(string.Format("{0}:{1}", text, selected ? "Selected" : "Not Selected"));
}
这将为您提供未选择的项目:
List<string> unselected = listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>());
您可以像这样遍历该列表:
foreach(string str in listBox1.Items.Cast<string>().Except(listBox1.SelectedItems.Cast<string>()))
{
System.Diagnostics.Debug.WriteLine($"{str} = Not selected");
}
我假设您使用 string
作为项目类型。如果您想使用其他东西,只需将 string
替换为您的类型,它应该仍然有效。
然后循环遍历未选择的项目以对它们执行任何操作,然后循环遍历 listBox1.SelectedItems
以对选定的项目执行任何操作。