Ссылка на существующий элемент управления в рамках одной функции - PullRequest
1 голос
/ 13 февраля 2012

Возможно, я путаюсь с терминологией, но вот что я пытаюсь сделать:

У меня есть функция перемещения, которая в итоге приведет к перемещению выбранных элементов из одного listBox в другой.Есть три списка с двумя кнопками со стрелками вправо и влево между каждым, чтобы переместить первые элементы списка в середину, середину назад в первый и т. Д.

Моя функция принимает различные названия кнопок через sender и в операторе switch я хочу выбрать, из каких listBox будут выбраны отправляемые элементы и куда они будут отправлены.Если это имеет смысл.

Цикл while внизу будет выполнять фактическое движение, в зависимости от того, что установлено для "to" и "from" listBoxes.

MyВопрос в том, как я могу в рамках этой функции ссылаться на имена трех существующих listBoxes в каждом из случаев оператора switch?Я знаю, что инициализация new listBox, как я сделал, неверна и просто создаст еще listBoxes.Возможно, для этого случая проще всего явно поместить цикл while в каждое из операторов case, но на будущее в более сложном сценарии я все же хотел бы знать, как это делается.

private void move(object sender, EventArgs e)
{
    Button thisButton = sender as Button;
    ListBox to = new ListBox();
    ListBox from = new ListBox();

    switch (thisButton.Name)
    {
        case "queueToProgressButton":
            to.Name = "queueListBox";
            from.Name = "progressListBox";
            break;
        case "progressToQueueButton":                    
            to.Name = "queueListBox";
            from.Name = "progressListBox";
            break;
        case "progressToCompletedButton":                    
            to.Name = "queueListBox";
            from.Name = "progressListBox";
            break;
        case "completedToProgressButton":                    
            to.Name = "queueListBox";
            from.Name = "progressListBox";
            break;

    }
    while (from.SelectedItems.Count > 0)
    {
        to.Items.Add(from.SelectedItem);
        from.Items.Remove(from.SelectedItem);
    }
}

1 Ответ

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

Вы должны использовать ссылки на существующие списки, а не размещать новые. Кроме того, ваши четыре ветви switch идентичны в коде, который вы разместили; Я не думаю, что это то, что вы хотели. Я внес коррективы в код, основываясь на том, что, как я думаю, вы хотели сделать в switch.

Попробуйте что-то вроде этого:

private void move(object sender, EventArgs e)
{
    Button thisButton = sender as Button;
    ListBox toListBox, fromListBox;

    switch (thisButton.Name)
    {
        case "queueToProgressButton":
            toListBox = progressListBox; // notice no "", but actual references
            fromListBox = queueListBox;
            break;
        case "progressToQueueButton":                    
            toListBox = queueListBox;
            fromListBox = progressListBox;
            break;
        case "progressToCompletedButton":                    
            toListBox = completedListBox;
            fromListBox = progressListBox;
            break;
        case "completedToProgressButton":                    
            toListBox = completedListBox;
            fromListBox = progressListBox;
            break;
        // Should add a default just in case neither 
        // toListBox or fromListBox is assigned here.
    }

    while (fromListBox.SelectedItems.Count > 0)
    {
        toListBox.Items.Add(fromListBox.SelectedItem);
        fromListBox.Items.Remove(fromListBox.SelectedItem);
    }
}
...