在 vb/c#.net 中创建一个连续的列表(像一个***)

Posted

技术标签:

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

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

一个 乙 C D

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

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

【问题讨论】:

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

以上是关于在 vb/c#.net 中创建一个连续的列表(像一个***)的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 中创建静态对象列表

在连续的内存块中创建具有可变元素的链表

使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法

在 dt.AsEnumerable() 中使用 from DataRow dRow 在 C# .NET 中创建不同的有序列表

如何在 iOS 中创建在每部 iPhone 中正确显示的按钮列表

如何在 ASP.NET MVC 中创建 CheckBoxListFor 扩展方法?