我可能会对术语感到困惑,但这就是我要做的事情:
我有一个移动功能,最终将所选项目从一个listBox
移动到另一个sender
。有三个列表框,每个列表框中有两个左右箭头按钮,用于将第一个列表框项目移动到中间,中间移动到第一个,等等。
我的功能通过switch
接受不同的按钮名称,在listBox
语句中,我想选择哪个listBoxes
是要发送的所选项目以及它们将在何处发送寄去。如果这是有道理的。
底部的while循环将执行实际移动,具体取决于为“to”和“from”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}}
答案 0 :(得分:2)
您应该使用对现有列表框的引用,而不是分配新的列表框。此外,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);
}
}