C# SelectedIndices已更改列表框
当列表框的C# SelectedIndices已更改列表框,c#,C#,当列表框的selectedDices属性更改时,是否有一些事件可以用来告诉我?我想根据项目的特定属性值取消选择列表框中的项目。我已经连接了一个事件,该事件适用于SelectedIndex更改时,但不确定如何在selectedDices属性更改为multiselection时执行 private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { Curve curItem = (Curve)listBox1.
selectedDices
属性更改时,是否有一些事件可以用来告诉我?我想根据项目的特定属性值取消选择列表框中的项目。我已经连接了一个事件,该事件适用于SelectedIndex
更改时,但不确定如何在selectedDices
属性更改为multiselection时执行
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Curve curItem = (Curve)listBox1.SelectedItem;
int index = listBox1.Items.IndexOf(curItem);
if (curItem.newName == null)
{
listBox1.SetSelected(index, false);
}
}
根据,每次选择更改时都将触发此事件:
如果SelectionMode属性设置为SelectionMode.MultiSimple或SelectionMode.MultiExtended,则对SelectedDices集合的任何更改(包括从选择中删除项目)都将引发此事件
因此,基本上,您可以使用与单个选择相同的方法来使用它
示例:
例如,如果要取消选择以null作为新名称的所有项目:
foreach (var item in listBox1.SelectedItems)
{
if ((item as Curve).newName == null)
{
int index = listBox1.SelectedItems.IndexOf(item);
listBox1.SetSelected(index, false);
}
}
(我不确定您是否可以取消选择foreach循环中的项目,因为它会更改SelectedItems对象本身。如果它不起作用,您仍然可以创建这些项目的临时列表,并在循环后取消选择。)根据,每次选择更改时都会触发此事件:
如果SelectionMode属性设置为SelectionMode.MultiSimple或SelectionMode.MultiExtended,则对SelectedDices集合的任何更改(包括从选择中删除项目)都将引发此事件
因此,基本上,您可以使用与单个选择相同的方法来使用它
示例:
例如,如果要取消选择以null作为新名称的所有项目:
foreach (var item in listBox1.SelectedItems)
{
if ((item as Curve).newName == null)
{
int index = listBox1.SelectedItems.IndexOf(item);
listBox1.SetSelected(index, false);
}
}
(我不确定您是否可以取消选择foreach循环中的项目,因为它会更改SelectedItems对象本身。如果它不起作用,您仍然可以创建这些项目的临时列表,并在循环后取消选择。)您可以使用
列表框。选择editems
和LINQ查找所有曲线,使用newName==null
取消选择它们:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var nullNameCurves = listBox1.SelectedItems
.Cast<Curve>()
.Where(c => c.newName == null)
.ToList();
listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
foreach (Curve curve in nullNameCurves)
listBox1.SetSelected(listBox1.Items.IndexOf(curve), false);
listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
}
private void listBox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
var nullNameCurves=listBox1.SelectedItems
.Cast()
.Where(c=>c.newName==null)
.ToList();
listBox1.SelectedIndexChanged-=listBox1_SelectedIndexChanged;
foreach(nullNameCurves中的曲线)
listBox1.SetSelected(listBox1.Items.IndexOf(曲线),false);
listBox1.SelectedIndexChanged+=listBox1_SelectedIndexChanged;
}
您可以使用列表框。选择editems
和LINQ查找所有曲线,使用newName==null
取消选择它们:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
var nullNameCurves = listBox1.SelectedItems
.Cast<Curve>()
.Where(c => c.newName == null)
.ToList();
listBox1.SelectedIndexChanged -= listBox1_SelectedIndexChanged;
foreach (Curve curve in nullNameCurves)
listBox1.SetSelected(listBox1.Items.IndexOf(curve), false);
listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
}
private void listBox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
var nullNameCurves=listBox1.SelectedItems
.Cast()
.Where(c=>c.newName==null)
.ToList();
listBox1.SelectedIndexChanged-=listBox1_SelectedIndexChanged;
foreach(nullNameCurves中的曲线)
listBox1.SetSelected(listBox1.Items.IndexOf(曲线),false);
listBox1.SelectedIndexChanged+=listBox1_SelectedIndexChanged;
}
private void listBox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
曲线curItem=null;
对于(int i=0;i
private void listBox1\u SelectedIndexChanged(对象发送方,事件参数e)
{
曲线curItem=null;
对于(int i=0;i
没有注意到msdn页面上的摘录。对代码做了一些修改,现在效果很好。您还应该删除事件处理程序,稍后再添加它,如我的回答所示。否则,它是一个无限循环,您将得到一个StackOverflowException
。除此之外,由于您正在修改foreach
中的SelectedItems
-集合,因此您将获得一个invalidoOperationException
。没有注意到msdn页面上的摘录。对代码做了一些修改,现在效果很好。您还应该删除事件处理程序,稍后再添加它,如我的回答所示。否则,它是一个无限循环,您将得到一个StackOverflowException
。除此之外,由于您正在修改foreach
中的SelectedItems
-集合,因此会出现InvalidOperationException
。