2017-04-17 7 views
0

중복 된 항목이 목록 상자에 추가되는 것을 방지하는 데 문제가 있습니다.문제 목록 상자에 저장 파일에서로드 된 항목이 포함되어있을 때 중복 목록 상자에 추가되는 것을 방지

  • 내 윈도우 폼이리스트 박스를 가지고있는 사용자가 버튼을 클릭 할 때, 그들은 첫 번째 상자에서 체크 한 항목이
  • 코드가 나는 아래의 두 번째 상자에 추가되도록 양식을 설계
  • "추가"버튼에 추가 된 항목은 상자 1에 체크 된 항목이 상자 2에 추가되는 것을 방지하기위한 것입니다.
  • 내 코드의 문제점은 복제를 중지하지 않는다는 것입니다 상자 2에 저장 파일에서로드 된 항목이 들어있는 경우 상자 2에 추가되지 않습니다.

이 문제를 해결하는 방법에 대한 의견이 있으십니까?

Public Sub additems_Click(sender As Object, e As EventArgs) Handles additems.Click 

    Dim itemChecked As Object 
    Dim alreadyonkey As Boolean 
    Dim duplicates As Integer = 0  

    If box1.CheckedItems.Count > 0 Then 
     For Each itemChecked In box1.CheckedItems 
      alreadyadded = False 
      'Check if item selected has already been added to box2 
      If box2.Items.Contains(itemChecked) = True Then 
       alreadyadded = True 
       duplicates = duplicates + 1 
      Else 
       alreadyadded = False 
      End If 

      'Add item if all criteria met 
      If box2.Items IsNot "" And alreadyadded = False Then 
       box2.Items.Add(itemChecked) 
      End If 
     Next 

     If duplicates > 0 Then 
      MsgBox("One or more of the items you are trying to add have already been added.", MsgBoxStyle.Critical, "Item has already been added") 
      alreadyadded = False 
     End If 
    End If 

최종 하위

+0

목록 상자 또는 체크리스트입니까? 당신은'Selected' 또는 유사한 프로퍼티와 그것들의 콜렉션을 데이터 소스로 포함하는 클래스를 사용할 수 있습니다. 첫 번째는 선택되지 않은 필터를 필터링하고 다른 필터는 반대가됩니다. – Plutonix

+0

Box1은 체크리스트입니다. Box2는 보통의 목록 상자입니다. 이 방법을 사용할 때 문제는 Box1에서 선택할 수있는 항목이 별도의 콤보 상자에서 어떤 인덱스가 선택되었는지에 따라 생성된다는 것입니다. –

답변

0

내가 내 코드로 문제를 파악 ...이 문제로 인해 필요한 Each 루프 중첩이 각각 BOX1의 각 항목을 비교하는 데 사용되는 사실을 주로했다 항목을 한 번에 하나씩 box2에 저장하고 문자열 변수에 보낼 항목을 "String.Equals"를 사용하여 비교해야했습니다.

Public Sub additems_Click(sender As Object, e As EventArgs) Handles additems.Click 

    Dim itemChecked As Object 
    Dim alreadyadded As Boolean 
    Dim duplicates As Integer = 0 


    If box1.CheckedItems.Count > 0 
     For Each itemChecked In box1.CheckedItems 
      Dim itemtoadd As String = itemChecked.ToString 

      'Check if item selected has already been added to box2 
      For Each item In box2.Items 
       Dim box2item As String = item.ToString 

       If String.Equals(Trim(itemtoadd), Trim(box2item)) = True Then 
        alreadyadded = True 
        duplicates = duplicates + 1 
       Else 

       End If 
      Next 

      'Add item if all criteria met 
      If itemChecked IsNot "" And alreadyadded = False Then 
       box2.Items.Add(itemChecked) 
      End If 
     Next 


     If duplicates > 0 Then 
      MsgBox("One or more of the items you are trying to add have already been added.", MsgBoxStyle.Critical, "Item hase already been added") 
      alreadyadded = False 
      duplicates = 0 
     End If 
    End If