Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SelectedIndices已更改列表框_C# - Fatal编程技术网

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