引用单个功能范围内的现有控件

本文关键字:控件 范围内 单个 功能 引用 | 更新日期: 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);
    }
}