【问题标题】:Create a continuous list (like a wheel) in vb/c#.net在 vb/c#.net 中创建一个连续的列表(像一个轮子)
【发布时间】:2020-06-03 15:34:33
【问题描述】:

在 Windows 窗体应用程序中,我需要一个列表,该列表一次只显示一个列表项,但可以连续滚动。例如,如果我的列表项是:

一个 乙 C D

如果 D 是显示的项目并且我向下滚动,它会返回到 A。这将类似于命运轮(尽管这不是我使用它的目的)。我认为列表控件会有一个连续滚动选项,但我没有找到这样的选项。

我想模仿这个(只是数字,而不是实际的锁):

【问题讨论】:

  • 您可能会考虑使用BindingNavigator。当到达终点时,您必须手动处理将位置设置回起点。
  • 向下滚动是什么意思,如果您的意思是滚动控件会导致所有用户离开,因为这不是控件的行为方式。
  • 也许可以告诉我们您为什么要这样做,并且可能有更好的解决方案可用。确保这不是 XY 问题。
  • 我不认为有一个简单的选项可以做到这一点。不过,如果这对您来说意义重大,您可能可以自己编写控件。
  • 在不描述如何使用的情况下请求控件是没有意义的。 ABCD 是什么?图片?文本?其他一些控件?

标签: c# vb.net winforms controls


【解决方案1】:

您可以使用LinkList<T> 来模拟这一点。我相信你可以在你的 winforms 中使用相同的逻辑,这样ScrollSown 的每个事件都可以显示下一个项目

控制台

var linkList = new LinkedList<int>(new int[] { 1, 2, 3, 4 }.AsEnumerable());

var first = linkList.First;
LinkedListNode<int> current = first;

while (true)
{

   Console.WriteLine($"Current value {current.Value}, press enter to Go Gext");
   Console.ReadLine();
   current = current.Next ?? first;

}

Console Output


WinForms

public LinkedList<object> linkList;
public LinkedListNode<object> current;
public LinkedListNode<object> first;

public Form1()
{
    InitializeComponent();

    linkList = new LinkedList<object>(new object[] { "A", "B", "C", "D" }.AsEnumerable());
    first = linkList.First;
    current = first;
    listBox1.Items.Add(current.Value);
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{

  current = current.Next ?? first;
  listBox1.Items.Add(current.Value);

}

WinForm Output

【讨论】:

  • 也可以写一个extension methodLinkedListNode&lt;T&gt;来添加这个功能。
猜你喜欢
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多