2009-11-06 63 views
1

我在C#中有一個Winform,我正在嘗試使用我有的按鈕列表構建一個哈希表。 IE:Monday0700Button,Monday0730Button,Monday0800Button,依此類推。 在散列表中,我試圖訂購這些散列表,這樣如果我需要使用按鈕及其後面的按鈕,我可以使用散列表鍵。 IE:如果我需要爲Monday0730和Monday 0800的背景着色,我可以通過某種方式告訴它在列表中找到下一個鍵。C#插入按鈕到Hashtable中

如何將這些按鈕添加到散列表中,以便我可以在此容量中使用它們。 謝謝。

回答

3

你需要的可能是一個OrderedDictionary,儘管其他方法也是可能的。我不會去一個Hashtable,因爲這是無序的,需要更多的代碼才能獲得訂購信息。

使用以下內容填充OrderedDictionary(我假設WinForms按鈕,但ASP.NET或其他按鈕會也可以工作):

// I assume your buttons are created somewhere 
// or already exist, i.e., they look something like: 
Button MondayXXXButton = new Button(); 
MondayXXXButton.Name = "MondayXXXButton"; 
MondayXXXButton.Text = "Hello world"; 

OrderedDictionary buttons = new OrderedDictionary(); 
buttons.Add(MondayXXXButton.Name, MondayXXXButton); 
// etc: for each button 

注意:您可以通過循環遍歷所有控件來自動添加按鈕。

然後,您可以使用以下方法查找下一個有序項目的位置(不幸的是,如果您不需要循環,就無法得到「下一個項目」,如果需要,您必須編寫自己的有序列表) :

Button GetNextButton(OrderedDictionary buttons, string searchThis) 
{ 
    IEnumerator enumerator = buttons.Keys.GetEnumerator(); 

    for (enumerator.Reset(); enumerator.MoveNext();) 
     if (enumerator.Current == searchThis) 
      break; 

    // if false, nothing was found, or last item was found 
    if (enumerator.MoveNext()) 
     return (Button)enumerator.Current; 
    else 
     return null; 
} 

最後,使用它來獲取某個按鈕並檢索下一個:

Button someButton = (Button) buttons["MondayYYYButton"]; 
Button nextButton = GetNextButton(buttons, "MondayYYYButton"); 

使用OrderedDictionary的好處是,你不應該擔心你怎麼加的項目,他們會爲你訂購。

更新:略有擴大解釋

0

散列表沒有固有的順序。標準哈希表中沒有「下一個」鍵。

您實際上使用了您可能應該使用的數據結構的名稱:List。列表將使您能夠根據需要進行「前進」和「後退」。

0

如果沒有更多信息,這很難回答,但根據你在這裏的內容,首先想到的就是這個。如果將按鈕的ID設置爲Monday0700Button或Monday0730Button,則只需將這些字符串添加到列表中。

List<string> myButtons = new List<string>(); 

myButtons.Add("Monday0700Button"); 
myButtons.Add("Monday0730Button"); 
myButtons.Add("Monday0800Button"); 
myButtons.Add("Monday0830Button"); 

然後,當您需要使用其中一個時,使用'FindControl'使用名稱查找按鈕的實例。

int index = myButtons.IndexOf(clickedButtonId); 
FindControl(myButtons[index++]); 

你不想將按鈕的實例放到Hashtable /字典中,我不會想。

0

雙向鏈表將更適合向前和向後迭代的數據結構,其中每個列表項都用作按鈕的數據源(例如,左側按鈕將遍歷左側節點,明智的按鈕會遍歷到正確的節點)。在討論中的這一點上將按鈕存儲在數據結構中並沒有什麼意義,而是存儲描述每個節點的信息,以便靜態按鈕可以適當地更新其文本。

您也可以使用List來實現此功能,但是,它需要在表示層中使用更多的代碼。