2014-12-18 2 views
1

"스마트 방식으로"목록 상자에있는 항목을 삭제하려고합니다. 내 문제에 대한 대안을 찾았지만 마음에 들지 않습니다.목록 상자에서 정규식을 사용하여 항목을 삭제하는 방법

내 프로그램은 매트릭스 계산기입니다. 모든 행렬은 사전에 있으며 그래픽 인터페이스의 목록 상자에 "인쇄"됩니다.

대신 목록 상자의 모든 항목을 삭제하고 사전에서 선택한 행렬을 제거한 다음 목록 상자에 모든 행렬을 다시 추가하십시오.

내 문제는 삭제하려는 항목의 색인을 찾아 삭제해야하지만, index은 항상 -1과 같습니다. 나는 해결책을 찾는다. 나는 방법을 재정의 할 필요가 있다는 것을 발견했다. Equals(), GetHashCode() 그리고 아마 ToString(). 더 나은 해결책이 있는지 궁금합니다. 내 정규식을 알고 싶다면

public static String Delete() 
    { 
     String matrix = matches[0].Groups[2].ToString(); 
     if (Calculatrice.listMatrix.ContainsKey(matrix)) 
     { 
      Matrix m = Calculatrice.listMatrix[matrix]; 

      int index = Calculatrice.mainWindow.ListBox_display.Items.IndexOf(m); 

      Calculatrice.mainWindow.ListBox_display.Items.RemoveAt(index); 

      Calculatrice.listMatrix.Remove(matrix); 

      return "Done!\n"; 
     } 
     throw new Exception("The matrix does not exist.\n"); 
    } 

이 그것입니다 private static Regex delete_rgx = new Regex(@"^(delete)\((\w+)\)$");

나는 StackOverflow의 커뮤니티에 새로 온 사람, 내가 만드는 방법에 대해도 내 문제에 대한 모든 제안을들을 것이다 더 나은 질문, 설명 등

+0

이 ** 객체가 ** listMatrix에서, 예를 들어 ListBox_display.Items과 동일해야합니다 사용하여 목록 상자를 채우는 시도 동일한 참조/메모리 주소가 있어야합니다. (복사 또는 복제품이 아님) 위의 코드는 작동합니다 – DrKoch

답변

0

ListBox_display에있는 객체는 아마도 listMatrix 사전의 정확한 객체가 아닙니다. 사전에있는 개체는 -1을 얻을 것이다 목록 상자에서 같은 객체가 아닌 경우

IndexOf 기능은 특정 개체 (당신이 원하는 것처럼)의하지만 귀하의 경우 인덱스를 반환합니다.

listMatrix.Values

+0

감사합니다;) 작동합니다! –

관련 문제