【问题标题】:C# - Moving list box items to new list boxesC# - 将列表框项移动到新列表框
【发布时间】:2011-07-11 23:22:07
【问题描述】:

我有 3 个列表框。我正在拆分一个文本文件以使用正则表达式将数据排序到正确的列表框中。

在排序结束时,将向用户显示 3 个列表框,每个列表框包含所有项目。但是,我希望用户能够在左侧、中间或右侧列表框中选择一行(或多行)。一旦选择了一个或多个项目,用户就可以点击一个按钮来“向左移动”或“向右移动”。根据用户关注的框(左、中、右)将确定所选项目将移动到的位置。

因此,如果用户想要将项目从左侧列表移动到右侧列表,他/她将选择最左侧列表中的项目并单击“向右移动”按钮。现在该项目将从左侧列表中删除并添加到中间列表中。现在用户必须从中间列表中选择它并再次单击“向右移动”按钮以将其从中间列表中删除并添加到右侧列表中。

如果有任何方法可以将项目从左侧列表中一直移动到“向右移动”按钮上单击两次会更好。


有谁知道如何通过一个简单的事情来解决这个问题?

【问题讨论】:

    标签: c# listbox add move


    【解决方案1】:

    将数据分解到各自的列表后,最简单的方法是执行这样的操作(伪代码)

    //from left list
    buttonToMiddle()
    {
      listMiddle.add(selected text);
      listLeft.remove(selected text);
    }
    
    //from middleList
    buttonToRight()
    {
      listRight.add(selected text);
      listMiddle.remove(selected text);
    }
    

    你明白了,它真的很容易,而且你可能还想看看任何其他方法来更有效地实现它,比如使用 switch 语句并给按钮一个 id 或某种类型。

    这只是一个全球性的想法和简单的方法。

    【讨论】:

    • 我认为OP正在寻找一种通过双击从左向右移动(跳过中间)的方法。
    • 如何获取选中的文本?它在列表框中,当我单击一个项目时,它会突出显示整行..但我不确定如何获取该行?
    • 有几种方法可以做到这一点,例如 textBox1.Text = ListBox1.SelectedValue.ToString(); .您可以查看 api 并单击事件以查看描述。 msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    另一个可疑使用的选项是通过第一次点击激活计时器。如果它在没有注册第二次点击的情况下过期,比如 0.5 秒,那么它会将项目移动一列。如果在这段时间内检测到第二次点击,请等到计时器到期,然后移动它 横跨两列。如果您有双击事件,我会使用它。否则,此方法可能会有所帮助。

    此方法应该适用于任意数量的列,但用户可能很难记住他们点击了多少次。

    【讨论】:

      【解决方案3】:

      我假设您在 ListBoxes 旁边有按钮可以将选定的项目移动到一个或另一个框中?

      如果是这样,您可以添加其他按钮以从左框移动到右框(跳过中间)或从右到左。

      我不确定从人因工程的角度来看这是不是最好的方法,但这是我认为你所要求的一种方法。

      编辑以添加

      我刚刚重新阅读了您的帖子 - 看起来您想要处理双击事件(我不确定它是否存在)。您可能想查看 MouseDown(和 MouseUp)事件并编写自己的双击事件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 1970-01-01
        • 2018-11-28
        相关资源
        最近更新 更多