引用单个功能范围内的现有控件
本文关键字:控件 范围内 单个 功能 引用 | 更新日期: 2023-09-27 18:24:09
我可能会混淆术语,但我要做的是:
我有一个移动功能,它最终会将选定的项目从一个listBox
移动到另一个。有三个列表框,每个列表框之间有两个左右箭头按钮,用于将第一个列表框项目移到中间,将中间的项目移回第一个,等等。
我的函数通过sender
接受不同的按钮名称,在switch
语句中,我想选择从哪个listBox
发送所选项目以及将它们发送到哪里。如果这有意义的话。
底部的while循环将执行实际移动,具体取决于为"到"answers"从"listBoxes
设置的内容。
我的问题是,在switch
语句的每种情况下,如何在该函数的范围内引用三个现有listBoxes
的名称?我知道像我所做的那样初始化new listBox
是错误的,只会创建更多的listBoxes
。对于这种情况,最简单的方法可能是在每个case
语句中显式地放置while
循环,但对于未来更复杂的场景,我仍然想知道如何做到这一点。
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);
}
}
您应该使用对现有列表框的引用,而不是分配新的列表框。此外,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);
}
}