1

コントロール ( ListItems) は動的に作成されるため、挿入前にソートすることはできません。

私は仕事をする解決策を試みました(リストを並べ替えてからコントロールを再構築します)が、より洗練された解決策が欲しいです。

完全を期すために、以下は私の現在の解決策です。

        List<ListItem> lli = new List<ListItem>();

        foreach (ListItem item in cblGIFFlags.Items) lli.Add(item);
        cblGIFFlags.Items.Clear();
        bool sorting = true;
        while (sorting)
        {
            sorting = false;
            for (int i = 0; i < lli.ToArray().Length - 1; i++)
            {
                ListItem x = lli[i];
                ListItem y = lli[i + 1];
                if (Comparer<String>.Default.Compare(x.Text,y.Text) > 0)
                {
                    lli[i] = y;
                    lli[i + 1] = x;
                    sorting = true;
                }
            }
        }
        foreach (ListItem item in lli) cblGIFFlags.Items.Add(item);
4

1 に答える 1

3

ListItemCollectionはIEnumerableを実装しているので、IEnumerable<ListItem>などにキャストできるのではないかと思いました。私はそのキャストを行う方法を理解できませんでした。これが私が思いつくことができる最高のものです:

var items = new List<ListItem>();
foreach (ListItem item in listBox.Items) items.Add(item);
listBox.Items.Clear();
listBox.Items.AddRange(items.OrderBy(i=>i.Value).ToArray());
于 2012-05-14T07:32:13.777 に答える