2010-02-15 131 views
0

在Windows窗體中,可以通過爲文本框提供一個簡單的字符串列表或通過爲其提供一個自定義源文件,該文本框只能是一個 AutoCompleteCollection,它是一個強類型的字符串列表。 我希望能夠爲每個字符串添加一個鍵..因此,只要有任何建議被選中,我可以抓住該鍵。自動完成文本框集合

我可能只是畫空白..但沒有人有建議嗎? 在此先感謝

+0

我以爲我可以從AutoCompleteCollection繼承並重新實現add和get,但是我只能覆蓋toString,getHashCode和Equals .... – irco 2010-02-15 23:57:17

+0

如果您對Josh的回答作出迴應,您應該將其發佈在他的回答中。至於你的評論,你可以實現另一個名字相同但參數不同的方法來重載它。您只能覆蓋虛擬成員,但始終可以重載。 – 2010-02-16 00:03:02

+0

你不需要「重寫」(覆蓋)。相反,你會增加一個過載。此方法不會替換接受一個參數的現有Add方法,而是添加一個額外的Add方法,該方法需要2個參數。在我的答案中看到我的例子。 – Josh 2010-02-16 00:03:07

回答

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

如果我理解正確的話,你想要的值在文本框中(可以自動建議)具有關聯的值。您可以通過創建一個Dictionary<string, string>並將TextBox文本作爲關鍵字以及您將「關鍵字」稱爲值來實現。無論何時您想要查找某個特定TextBox值的「密鑰」,都可以查看該字典。

當然,如果必須有密鑰,TextBox可能不是表示數據的最佳方式。如果必須有密鑰,則ComboBox(其中DropDownStyle設置爲ComboBoxStyle.DropDownList)可能是更好的選擇。