2012-07-19 4 views
2

이 잘 작동 :목록 상자의 selectedItem 문제

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < listBox1.SelectedItems.Count; i++) 
    { 
     listBox1.Items.Remove(listBox1.SelectedItems[i].ToString()); 
     i--; 
    } 
} 

하지만이 작동하지 않습니다 왜 번째 btnDelete_Click가 작동하지

private void btnDelete_Click(object sender, EventArgs e) 
{ 
    listBox1.Items.Remove(listBox1.SelectedItems); 
} 

? 내 마우스로 내 listBox1에있는 회선을 선택한 다음 단추를 누르십시오. .Remove 기능이 선택한 회선을 인식하지 못합니까? 비록 내가 .Remove(listBox1.SelectedItem)라고해도, 반드시 selectedItem 배열이 있어야합니까? SelectedItems이라는 단어가 자명하지 않습니까? 그리고 내 마우스로 내 listBox1의 행을 클릭했기 때문에 프로그램이나 IDE가 어떤 행을 선택하는지 이해할 수 없습니까? 여전히 SelectedItems[i]을 사용해야하는 이유는 무엇입니까?

+0

처음으로 ToString()을 호출하는 이유는 무엇입니까? Remove 메소드는'object' 타입을 취합니다. –

+0

그리고 왜 너는 내가 ... - 모든 항목을 반복하고 루프를 잠그면 나는을 제거한다. 또는 내게 그 이유를 설명해주세요. 내 대답을보세요 – JohnnBlade

+0

예 발리 우르 바로 ToString()이 필요하지 않습니다. –

답변

1

두 번째 예제가 작동하지 않는 이유는 컬렉션의 형태로 여러 항목을 전달하여 한 번에 제거 할 수 있습니다.

루프를 필요로하므로 이유를 한 번에 그것을 하나를 수행해야합니다 항목을 제거하십시오.

또한 ListView을 사용 하시겠습니까?개인적으로 더 많은 옵션을 사용하는 것이 더 쉽습니다. 당신은 당신이

listBox1.Items.Remove(listBox1.SelectedItem); 

SelectedItem

을 다음 선택 한 번에 하나의 항목을 제거하려는 경우 당신은 그냥이

foreach (ListViewItem item in listView1.SelectedItems) 
{ 
    item.Remove(); 
} 

ListView에 대한 귀하의 루프를 만들 수있는 예를 들어

SelectedItems이 아닌 복수형은 루프없이 처리 할 수없는 컬렉션이며, 단수는 이해할 수있는 단일 항목입니다.

+0

ok ListView 항목에 대해 발리 C에게 감사드립니다. u가 지적한 것처럼 더 쉽게 보입니다. 그리고 이유에 대해 u는 여러 줄을 선택하지 않았습니다.나는 그 속성을 열지 못했습니다. 단 하나의 행만 선택할 수는 없으며 하나는 하나의 항목 만 제거 할 수 있습니다. 여러 항목이 아닙니다. 미안해, 내가 잘못 알았어. 너는 말을하거나 더 깊이 설명해. 감사. –

+0

알았어, 지금 내 대답을 볼 수 있는데, 내가 이해한다면 잘하면 당신의 질문에 답할 수있다. :) –

+1

발리 C가 이제 분명 해졌고, 내 질문과 계몽에 합류 한 모든 분들께 감사 드리고 싶습니다. –

1

내가 SelectedItems는 indeks 번호가 필요하다고 생각합니다. 아마도 그 이유는 어떤 항목도 삭제할 수 없기 때문입니다.

+0

예, 경험상으로 인덱스 번호가 필요하지만 이해가 되었습니까? 메신저 라인을 선택하고 사용합니다. 프로그램을 죽일 수 없거나 IDE는 그것을 이해합니까? 왜 색인 번호를 주어야합니까? thats 질문! –

1

listBox1.SelectedItems은 선택한 항목의 모음을 반환합니다. 항목을 제거하려면 Remove()을 사용하여 컬렉션의 단일 개체 만 전달하거나 컬렉션의 개체에 대한 인덱스를 RemoveAt()으로 사용하여 전달할 수 있습니다.

listBox1.Items.Remove(listBox1.SelectedItem); 

인덱스에서 개체를 제거 :

listBox1.Items.RemoveAt(5); 

더 인 removeRange() 메소드, 당신이 찾고있는이 없습니다

객체를 제거합니다.

1

또한

for (int i = (listBox1.SelectedItems.Count - 1); i >= 0; i--) 
    { 
     listBox1.Items.Remove(listBox1.SelectedItems[i]); 
    } 

for (int i = 0; i < listBox1.SelectedItems.Count; i++) 
{ 
    listBox1.Items.Remove(listBox1.SelectedItems[i].ToString()); 
    i--; 
} 

변경 이는

listBox1.Items.Remove(listBox1.SelectedItem); 
+0

u 질문보기 나는 이미 존과 수정을 찾고있는 사람이 누구인지 알고있다. 나는 이미 숫자를주고 색인해야하지만 그 이유는 무엇입니까? 나는 나의 질문을 설명했다. 다시 읽어 주시면 감사하겠습니다. –

+0

왜 내가 ~을 추가 했습니까? 그 루프가 인덱스 0에 갇혀 있어야하지 않는 한 그것의 필요하지 않다 – JohnnBlade

+0

atleast 그 괴괴 망측 한 연습 – JohnnBlade

1

ListBox.Items.Remove()한 단일 아이템ListBox.SelectedItems retu 동안 제거 기대되어야 번호 : 상품 모음 (SelectedObjectCollection) - 단 하나의 항목 만 선택하더라도!

당신은 모든 항목 제거하기위한 확장 방법을 쓸 수

:

public static class ListBoxExtension 
{ 
    public static void RemoveSelectedItems(this ListBox source) 
    { 
     if(source==null) return; 
     while(source.SelectedItems.Count!=0) 
     { 
      source.Items.Remove(source.SelectedItems[0]); 
     } 
    } 
} 

이 그런 식으로 사용할 수있다 :

당신이 시도하고 있기 때문에
this.listbox1.RemoveSelectedItems(); 
+0

시도했습니다. this.listBox1.RemoveSelectedItems(); 하지만 작동하지 않습니다. after.listBox1. RemoveSelectedItems()와 같은 것은 없습니다 –

+0

그렇기 때문에 확장 메서드를 정의해야합니다. –

+0

확장 메서드가 있고, 새 클래스에 모두 복사 한 다음 확장 메서드가 목록 상자에 추가 된 것을 볼 수 있습니다. – JohnnBlade