2009-11-06 65 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来实现此功能,但是,它需要在表示层中使用更多的代码。