C# C如何防止ListBox在取消选择最后一项时选择第一项

C# C如何防止ListBox在取消选择最后一项时选择第一项,c#,listbox,selection,C#,Listbox,Selection,C如何防止ListBox在多简单选择模式下自动选择第一个项目,当您取消选择框中最后一个选定项目时-仅当ListBox由我自己的类对象表示时,才会发生这种情况,当ListBox由字符串对象表示时,一切正常。Thnx 似乎跟踪列表的顺序是最重要的部分。我建议可能制作一个结构数组。您可以使此结构包含您想要的任何内容,例如: struct itemList { public string itemName; public int itemIndex; //include what

C如何防止ListBox在多简单选择模式下自动选择第一个项目,当您取消选择框中最后一个选定项目时-仅当ListBox由我自己的类对象表示时,才会发生这种情况,当ListBox由字符串对象表示时,一切正常。Thnx

似乎跟踪列表的顺序是最重要的部分。我建议可能制作一个结构数组。您可以使此结构包含您想要的任何内容,例如:

struct itemList
{
    public string itemName;
    public int itemIndex;
    //include whatever other variables that you need included in here.

}
另外,请确保将结构放在名称空间之前。然后,使结构的数组如下所示:

itemList[] items1 = new itemList[listBoxName.SelectedItems.Count];
然后,您所要做的就是在对列表框重新排序之前将这些项添加到数组中

for (int i = 0; i < listBoxName.SelectedItems.Count; i++)
   {
        items1[i].itemName = listBoxName.SelectedItems[i].ToString();
        items1[i].itemIndex = listBoxName.SelectedIndices[i];
   }

非常感谢,但我已经用过一些这样的了。我不明白为什么每次我将预加载的列表指定为数据源时,都会选择listBox的第一项。我解决这个问题的方法是,为我的对象类创建另一个临时列表,其中的项是从二进制文件读取的,然后通过listOfObjects.Addobject方法在每个循环中将它们逐个推送到我的原始列表中。我知道每次代码ListOfTags.DataSource=null之后; ListOfTags.DataSource=标记;
ListOfTags.DisplayMember=名称;如果我的标记是一个列表,即使在代码中也会预加载,例如,如果我编写代码列表标记=新列表{new Tag1,new Tag2,new Tag3},这种情况发生在选择列表框的第一个项目时,然后每次尝试取消选择列表框中的最后一个选定项目时都开始选择

据我所知,当我使用binaryFormatter对列表进行反序列化时会引发问题。当我在启动时关闭此列表加载时,一切正常。读取的代码是:public static T ReadFromBinaryFilestring文件路径{using Stream=File.OpenfilePath,FileMode.Open{var binaryFormatter=new System.Runtime.Serialization.Formatters.Binary.binaryFormatter;return TbinaryFormatter.Deserializestream;}}您可以使用listBoxName.ClearSelected吗?我可以,但我的程序必须在对列表重新排序后记住所选项目,并且所选和未选项目的顺序在重新排序后是shift和Break,并且在取消选择任何其他最后选择的项目后,第一个项目会连续选择。当我用ReadingFromBinaryFile注释代码时,就不会发生这种情况,其他什么都不会发生。这是一件奇怪的事情,我不明白为什么会这样。所以我做了一个丑陋的补丁来解决它——每次当最后一项被取消选择时,我都会像你说的那样做。但我仍然想知道,在分配了类的预加载列表(每次选择列表的第一项)作为数据源之后,这个错误的原因是什么。如果标签列表是空的,并且在运行时通过打印文字上传,那么问题就不是firedup。无论如何,谢谢你。PS VS2008 with Net.3.5抱歉,在看到您的评论之前我正在键入我的答案,不确定我的答案是否会,请帮忙,祝您好运