在 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<T>
来添加这个功能。以上是关于在 vb/c#.net 中创建一个连续的列表(像一个***)的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 在 ASP.NET MVC 3 中创建级联下拉列表的最简单方法
在 dt.AsEnumerable() 中使用 from DataRow dRow 在 C# .NET 中创建不同的有序列表