2010-02-15 7 views
0

Windows 양식에서는 텍스트 상자에 간단한 문자열 목록을 제공하거나 강력한 형식의 문자열 목록 인 AutoCompleteCollection 만 될 수있는 사용자 지정 원본을 제공하여 텍스트 상자에 자동 완성 텍스트 상자를 만들 수 있습니다. 각 문자열에 키를 추가 할 수 있기를 원합니다. 따라서 제안이 선택 될 때마다 해당 키를 가져올 수 있습니다.자동 완성 텍스트 상자 모음

나는 비어있는 그림을 그릴 수 있습니다.하지만 누구에게도 제안이 있습니까? 미리 감사드립니다.

+0

내가 AutoCompleteCollection에서 상속받을 수 있고 add 및 get을 다시 구현할 수 있다고 생각했지만 toString, getHashCode 및 Equals 만 재정의 할 수 있습니다. – irco

+0

조쉬의 답변에 응답하는 경우 해당 답변에 게시해야합니다. 귀하의 의견에 관해서는, 당신은 같은 이름이지만 다른 매개 변수를 다른 메서드를 구현할 수있는 과부하. 가상 멤버 만 재정의 할 수는 있지만 언제나 오버로드 할 수 있습니다. –

+0

"다시 구현"(재정의) 할 필요가 없습니다. 대신 과부하를 추가합니다. 이 메서드는 하나의 매개 변수를 사용하는 기존의 Add 메서드를 대체하지 않고 2 개의 매개 변수를 사용하는 추가 Add 메서드를 추가합니다. 내 대답을 보아라. – Josh

답변

2

AutoCompleteStringCollection 클래스는 확실히 파생되지 않으므로 두 개의 매개 변수 인 키와 값을 사용하는 Add 오버로드를 만들 수 있습니다.

그런 다음 사전에서 추적 할 수 있습니다. 당신은 (한 번 기본 클래스의 컬렉션과 한 번 사전에) 두 번 문자열을 저장해야하지만 당신은 다음과 같이 조회 방법을 추가 할 수 있습니다 내가 제대로 이해하면

class KeyedAutoCompleteStringCollection : AutoCompleteStringCollection { 

    private readonly Dictionary<string,string> keyedValues = 
     new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase); 

    public void Add(string value, string key) { 
     base.Add(value); 
     keyedValues.Add(value, key); // intentionally backwards 
    } 

    public string Lookup(string value) { 
     string key; 
     if (keyedValues.TryGetValue(value, out key)) { 
      return key; 
     } 
     else { 
      return null; 
     } 
    } 

} 
0

, 당신은 값을 원하는 (자동 제안 될 수있는) 텍스트 상자에 관련 값이 있어야합니다. TextBox 텍스트를 키로 사용하고 '키'를 값으로 사용하여 Dictionary<string, string>을 작성하면됩니다. 특정 TextBox 값의 '키'를 찾으려는 경우 사전을 확인할 수 있습니다.

물론 키가 있어야하는 경우 TextBox은 데이터를 나타내는 가장 좋은 방법은 아닙니다. 키가 있어야하는 경우 ComboBox (DropDownStyleComboBoxStyle.DropDownList으로 설정)이 더 좋은 옵션 일 수 있습니다.

관련 문제