Создайте непрерывный список (как колесо) в vb / c#. net - PullRequest
1 голос
/ 19 февраля 2020

В приложении windows для форм мне нужен список, который показывает только один элемент списка за раз, но который можно прокручивать непрерывно. Например, если бы мои элементы списка были:

AB C D

Если бы D был отображаемым элементом, а я прокрутил вниз, он бы go вернулся бы к A. Это было бы похоже на колесо фортуны (хотя это не то, для чего я его использую). Я подумал, что у элемента управления списка будет опция непрерывной прокрутки, но я не нашел такой.

Я хочу имитировать c это (только цифры, а не фактическая блокировка): enter image description here

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вы можете использовать LinkList<T> для симуляции этого. Я полагаю, что вы можете использовать тот же лог c в ваших 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;

}

Консольный вывод


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

0 голосов
/ 20 февраля 2020

Вы можете сделать это, просматривая список, содержащий «ABCD». Затем отобразите результат на определенном элементе управления. Вот демонстрация того, что использует ListBox.

List<string> list = new List<string>() { "A", "B", "C", "D" };

private void Form1_Load(object sender, EventArgs e)
{
    listBox1.Size = new Size(120, 17);
}

int index = 0;
private void btNext_Click(object sender, EventArgs e)
{
    // clear the items
    listBox1.Items.Clear();
    // add next item
    listBox1.Items.Add(list[index]);
    index++;
    // check if is the last item
    if(index == list.Count)
    {
        // reset index
        index = 0;
    }
}

Результат теста:

enter image description here

...