for (int i = 0; i < listBox1.Items.Count; i++)
            {
                for (int j = i + 1; j < listBox1.Items.Count; j++)
                {
                    if (listBox1.Items[i].Equals(listBox1.Items[j]))
                    {
                        listBox1.Items.Remove(listBox1.Items[j]);
                       
                       
                    }
                        
                } private void Form1_Load(object sender, EventArgs e)
        {
            this.listBox1.Items.Add("张飞");
            this.listBox1.Items.Add("张飞");
            this.listBox1.Items.Add("张飞");
            this.listBox1.Items.Add("关羽");
            this.listBox1.Items.Add("刘备");
            this.listBox1.Items.Add("赵云");
            this.listBox1.Items.Add("赵云");
            this.listBox1.Items.Add("姜维");
            
        }
执行结果如下:(为什么还个重复的张飞没删除呢? ) 
 

解决方案 »

  1.   

    原因:Remove方法执行改变了listBox1.Items.Count的数据
      

  2.   

    listBox1.Items.Remove(listBox1.Items[j])每调用一次,listBox1的索引都会变化,当你删除第一个张飞后,后面张飞的索引只由2=>1,但是j++之后j=>2,所以重复
      

  3.   

    排除重复ListBox listbox = new ListBox();
     if (!listbox.Items.Contains("xx"))
    {
     listbox.Items.Add("xx");
     }
      

  4.   


    怎么样才能解决呢? btn点2次就移除了,怎不可能去点2次吧
      

  5.   

    i=0,j=1时,删除了一条“张飞”
    此时Items[2]的那个“张飞”变成了Items[1]了
    但是你的j变成2了,所以看不到这个“张飞”了应该remove的时候不++
      

  6.   

    int j = listBox1.Items.Count-1; j >0; j--
      

  7.   

    int j = listBox1.Items.Count-1; j >i; j--