我有一个列表框,其中包含6个值。使用按钮可以将新项目插入列表框。我可以使用我添加的其他按钮上下移动所有这些项目。为了理解,我们将调用新创建的项目(我想充当组/分隔符)“组”。我想要完成的是存储组之间的项目。例如通过SortedDictionary<int itemIndex, string group>
。一个例子(注意括号内的数字是索引):
Group 1 [0]
Item 1 [1]
Item 2 [2]
Item 3 [3]
Group 2 [4]
Item 4 [5]
Item 5 [6]
Group 3 [7]
Item 6 [8]
字典可能如下所示:
1, "group 1"
2, "group 1"
3, "group 1"
5, "group 2"
6, "group 2"
8, "group 3"
第一个数字是列表框中的项目索引,第二个数字(字符串)是它所属的组。
所以我的问题是:如何循环列表框以便我可以检查哪些项目属于哪个组?如果有一种更简单的方法(使用与列表框不同的控件),我也很乐意尝试。
答案 0 :(得分:1)
如果您的意思是winforms,ListView
内置了.Groups
(每个ListViewGroup
),每个ListViewItem
都有.Group
。这应该可以在代码中轻松实现您的需求,并且在视觉上直观地为用户提供。
请注意,只有在.View
为View.Details
,.ShowGroups
为true
并且启用了视觉样式(Application.EnableVisualStyles()
时,才会显示组,通常在{ {1}})。
答案 1 :(得分:0)
我自己设法解决了这个问题:
// Create string to save last 'used' group in.
string lastGroup = string.Empty;
// Create counter to check what index we are at in the ListBox.
int i = 0;
// Create a dictionary to store <string Item, string Group>.
Dictionary<string, string> dictionary = new Dictionary<string, string>();
// Loop every item (as string) in the ListBox.
foreach (string o in lbxMain.Items)
{
// If the item is a group:
if (o.StartsWith("Group:"))
// Put the name of the item into the lastGroup variable so we know where to put the items in.
lastGroup = lbxMain.Items[i].ToString();
// If the item is an item:
if (o.StartsWith("Item:"))
// Put the item into a dictionary with the lastGroup variable saying what group it's part of.
dictionary .Add(o + " " + i, lastGroup);
// Increase i so we keep an eye on the indices.
i++;
}
如果您只想要代码:
string lastGroup = string.Empty;
int i = 0;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
foreach (string o in lbxMain.Items)
{
if (o.StartsWith("Group:"))
lastGroup = lbxMain.Items[i].ToString();
if (o.StartsWith("Item:"))
dictionary.Add(o + " " + i, lastGroup);
i++;
}