2012-12-01 2 views
2

데이터를 보관할 하나의 목록 상자가 있어야하는 응용 프로그램에서 작업하고 있습니다. 목록 상자에서 개체를 삭제할 때목록 상자 항목의 원점을 결정하십시오.

은 좀 문제가 있어요. 이 문제는 두 개의 개별 목록에있는 항목으로 목록 상자를 채울 때 작용합니다.

일반적으로 객체를 삭제하려면 색인을 얻은 다음 별도의 클래스에서 목록에서 제거한 다음 변경 사항을 반영하여 목록 상자를 다시로드하지만 특정 인스턴스에서는 객체가있는 목록 상자를 채울 필요가 있습니다. 두 개의 서로 다른 목록과 두 개의 목록 중 하나에서 삭제할 개체의 출처를 결정, 글쎄,이 작업을 수행하는 방법을 잘 모르겠습니다.

이 코드는 목록 상자 컨트롤을 채 웁니다. // 목록 상자의 모든 항목 지우기 ViewListBox.Items.Clear();

 //create the lists 
     List listOfPickups = visits.listPickups(); 
     List listOfdeliveries = visits.listDeliveries(); 
     //populate 
     ViewListBox.Items.AddRange(listOfPickups.ToArray()); 
     ViewListBox.Items.AddRange(listOfdeliveries.ToArray()); 

이렇게하면 목록에서 하나의 목록 만로드 할 때 삭제됩니다.

 if (ViewListBox.SelectedIndex < 0) 
     { 
      EditSelectBtn.Enabled = false; 
      DeleteSelectBtn.Enabled = false; 
     } 
     else 
     { 
      if (MessageBox.Show("are you sure you want to delete the selected item?", "Are You Sure?", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       visits.removePickup(this.ViewListBox.SelectedIndex); 
       //refresh listbox. 
       updateList("pickups"); 
      } 
      else 
      { 
       //clicked no so do nothing! 
       ViewListBox.ClearSelected(); 
      } 
     } 

어떤 도움이 크게 appretiated 것입니다.

+0

WPF 또는 윈폼? –

+1

메트로? WinForms? WPF? 실버 라이트? 윈도우 폰? ASP.Net? MonoTouch? – SLaks

답변

2

당신은 선택한 항목의 유형을 정의하고 간단한 조건 목록에서 제거 할 수 있습니다. 또한 색인으로 제거해도 도움이되지 않습니다. 다음 항목 유형을 얻을 수있는 다른 방법 (일부 재산의 예를 들어, 값)를 사용 항목이 동일한 유형이 대신

object item = ViewListBox.SelectedItem; 

if (item is Pickup) 
    visits.removePickup(item); 
else 
    visits.removeDelivery(item); 

경우 전체 개체를 전달합니다.

UPDATE 한 캐치 - 먼저 픽업 항목으로 추가되기 때문에 당신이 listOfPickups 길이 SelectedIndex를 비교하여 상품 정보 출처를 확인할 수 있습니다. 색인이 픽업 횟수보다 크면 전달을 제거합니다. 선택한 인덱스에서 픽업 수를 뺀 후 제거해야하는 배달 항목의 인덱스를 가져옵니다.

List<Pickup> listOfPickups = visits.listPickups(); 
List<Delivery> listOfdeliveries = visits.listDeliveries(); 
ViewListBox.Items.AddRange(listOfPickups.ToArray()); 
ViewListBox.Items.AddRange(listOfdeliveries.ToArray()); 
//... 

if (ViewListBox.SelectedIndex < listOfPickups.Count) 
{ 
    // this is a Pickup 
    visits.removePickup(ViewListBox.SelectedIndex); 
} 
else 
{ 
    // this is a delivery 
    int deliveryIndex = ViewListBox.SelectedIndex - listOfPickups.Count; 
    visits.removeDelivery(deliveryIndex); 
} 
+0

어떻게 구현할 것인가? 죄송합니다. 솔직히 말하면, 전에는 목록으로 일한 적이 없으며 배우기도하지만 제한된 시간이 남았습니다. (하루) 모든 것을 마지막 순간에 남겨 두도록 가르쳐줍니다. 결코 배우지 마십시오. - 업데이트 부분? 고맙습니다. – rkleman12

+0

귀하의 목록에 어떤 유형이 있습니까? 일반적인'List '클래스입니까? 그렇다면 어떤 종류의'T'입니까? 배달 항목과 픽업 항목이 다른 클래스입니까, 아니요? –

+0

안녕하세요, 배송 및 픽업은 두 개의 별도 클래스에 있습니다. '방문'을 만들 때마다 새로운 픽업/배달 객체가 만들어지며이 객체는 방문 클래스의 목록에 추가됩니다. 이들은 개인 목록 목록 pickups = 새 목록 (); 개인 목록 배달 = 새 목록 (); – rkleman12

관련 문제