2013-02-13 4 views
1

하나 이상의 값을 선택하기 위해 C# 응용 프로그램의 Listview 컨트롤에 몇 가지 이름과 확인란이 있습니다. 확인란을 클릭하는 것 외에도 사용자가 이름을 클릭 할 수 있으며 파란색으로 표시됩니다. 이름을 클릭하면 더 많은 데이터가 표시되고 확인란을 클릭하면 추가 처리를위한 표시가 나타납니다.C# Listview의 체크 된 항목

확인란을 클릭하면 Item.Checked 속성이 변경되고 이름이 변경됩니다. Item.Selected 변경된 것으로 보입니다. 그렇게 간단하지 않아야합니다.

내가 선택한 항목 세는 코드를 가지고 :

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{ 
    foreach(ListViewItem Item in ListView1.Items) 
    { 
     if (Item != null) 
     { 
      if (Item.Checked == true) N++; 
     } 
    } 
    Textbox1.Text = N.ToString(); 
} 

사용자가 적절한 수의 디스플레이의하지만 그는 이름을 클릭하면 확인 번호를 확인 아직도 체크 박스가있는 경우에도 1로 변경 체크 박스를 클릭하면, 그것은 분명히 틀렸다. 또한 양식 및 컨트롤로드, 확인란을 선택하지 않은 경우에도 내 N = 1 얻을.

내가 뭘 잘못하고 있니?

편집 : 빠른 응답과 유용한 힌트를 보내 주셔서 감사합니다!

그리고 이전 코드를 삭제하는 것을 잊어 버렸을 때 내 문제가 과실이라고 알았습니다! :) 는 처음 엔 내가 항목을 선택하는 다중 선택을 사용, 그때 체크 박스로 전환하지만 여전히 인 selectionchanged 이벤트를 호출하고 ListView.CheckedItems.Count 속성을 사용하는 ListView 컨트롤에서 선택한 항목의 수를 얻으려면 텍스트 상자의 내용

+3

어디 N 초기화를? 이벤트 코드에서 N은 다시 계산하기 위해 0으로 설정되지 않습니다. – dutzu

+0

나는 N이 1 b4 u r이 루프에 들어 가지 않기를 바란다. – Igoy

+1

@ Yogendra : 올바른 철자를 사용하십시오. 우리는 여기 스크립트 대담한 채팅을하지 않습니다. –

답변

5

을 수정했다.

예 :

int numCheckedItems = myListView.CheckedItems.Count; 

또는

TextBox1.Text = myListView.CheckedItems.Count.ToString(); 
2

당신은 ItemCheckedEventArgs는 당신이 필요로하는 모든 정보를 제공하기 때문에 모든 항목 물마루 반복해서는 안 :

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e) 
{ 
    ListViewItem item = e.Item as ListViewItem; 
    if (item != null) 
    { 
     if (item.Checked) 
     { 
      N++; 
     } 
     else 
     { 
      N--; 
     } 
    } 
    Textbox1.Text = N.ToString(); 
} 
+0

이벤트 'ItemChecked'가있는'ListView'는'Winforms'입니다. 그래서'ViewState'는 관련이 없습니다 :) – gzaxx