Передача содержимого ListBox и удаление - PullRequest
0 голосов
/ 06 февраля 2012

Я выполняю задание HW (как всегда, не делайте косвенно меня обманщиком, помогите мне учиться!), И у меня МНОГО проблем с этим списком.

У меня в настоящее время естьон может перемещать / удалять отдельные элементы (fruits selecteditem => myFruits)

Однако мне нужно иметь возможность перемещать ВСЕ элементы одновременно (удалить их легко).

Google hasnЭто не очень помогло, кажется, что многие ответы слишком сложны для начинающего C # или ужасно устарели.

Итак, вопрос: как перенести содержимое одного списка в другой?(Имя списка1: фрукты. Имя списка2: myFruits)

Ответы [ 3 ]

2 голосов
/ 07 февраля 2012

Вы можете использовать следующую стратегию:

  1. Копировать выбранные фрукты (fruits.SelectedItems) в новый список
  2. Просмотрите этот список и для каждого фрукта:
    • Удалите его из списка фруктов. (fruits.Items.Remove)
    • Добавьте его в список myFruits ListBox. (fruits.Items.Add)
1 голос
/ 07 февраля 2012

У меня есть некоторые свойства, которые я использовал некоторое время назад в аналогичном проекте ... Надеюсь, это поможет, поскольку не даст вам полного ответа, но даст вам отправную точку на основе вашей домашней работы с двумя списками фруктов.

    public List<string> NotAddedAssets
    {
        get
        {
            List<string> notAddedAssets = new List<string>();

            for (int i = 0; i < lbNotAddingAssets.Items.Count; i++)
                notAddedAssets.Add(lbNotAddingAssets.Items[i].ToString());

            notAddedAssets.Sort();

            return notAddedAssets;
        }
        set
        {
            lbNotAddingAssets.AppendDataBoundItems = true;
            lbNotAddingAssets.Items.Clear();
            value.Sort();
            lbNotAddingAssets.DataSource = value;
            lbNotAddingAssets.DataBind();
        }
    }

    public List<string> AddedAssets
    {
        get
        {
            List<string> addedAssets = new List<string>();

            for (int i = 0; i < lbAddingAssets.Items.Count; i++)
                addedAssets.Add(lbAddingAssets.Items[i].ToString());

            addedAssets.Sort();

            return addedAssets;
        }
        set
        {
            lbAddingAssets.AppendDataBoundItems = true;
            lbAddingAssets.Items.Clear();
            value.Sort();
            lbAddingAssets.DataSource = value;
            lbAddingAssets.DataBind();
        }
    }
1 голос
/ 06 февраля 2012

Чтобы переместить все элементы, попробуйте пойти в обратном порядке:

for (int i = listBox1.Items.Count - 1; i >= 0; i--) {
  listBox2.Items.Add(listBox1.Items[i]);
  listBox1.Items.RemoveAt(i);
}

Более практичным способом перемещения всех «выбранных» элементов будет первый цикл по всем выбранным элементам идобавьте их во второй список:

for (int i = 0; i < listBox1.SelectedItems.Count; i++) {
  listBox2.Items.Add(listBox1.SelectedItems[i]);
}

И затем, чтобы удалить эти элементы из listBox1, проще перейти в обратном порядке:

for (int i = listBox1.SelectedIndices.Count - 1; i >= 0; i--) {
  listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
}

Причина обратного порядкапростота.Если вы удалите элементы в прямом порядке, индекс «следующий» будет отключен на единицу, и вам придется вручную отслеживать ваши индексы.Следовательно, обратный порядок позволяет избежать этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...