显示多个数组项并在到达结束时返回到开始

时间:2014-07-08 14:01:33

标签: c#

我有一个包含许多项目的主数组,例如100(itemsArray) 我有第二个7个项目的数组,从主数组中填充,具体取决于所选内容(selectedItemsArray)

第二个数组输出到屏幕,当我向左或向右按​​下时,显示数组中的下一个项目或上一个项目,但之前显示3个前一个项目,之后显示下一个项目。

然而,一旦到达数组的末尾(或项目低于0)它崩溃(不是一个惊喜)但是如何计算在达到0的结束或开始时应该选择数组中的数字< / p>

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace test2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            string[] itemsArray = new string[100];
            int selectedIndex = 0;

            private void displayItems(string[] items)
            {
                StringBuilder output = new StringBuilder("");
                for (int i = 0; i < items.Count(); i++)
                {
                    output.AppendLine(items[i]);
                }
                textBox1.Text = output.ToString();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                for (int i = 0; i < itemsArray.Count(); i++)
                {
                    itemsArray[i] = "Item " + i;
                }
                callItems();
            }

            private void callItems()
            {
                string[] selectedItemsArray = new string[7];
                Array.Copy(itemsArray, selectedIndex, selectedItemsArray, 0, 7);
                displayItems(selectedItemsArray);
            }

            private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                switch (e.KeyData)
                {
                    case Keys.Left:
                        {
                            selectedIndex--;
                            callItems();
                            break;
                        }
                    case Keys.Right:
                        {
                            selectedIndex++;
                            callItems();
                            break;
                        }
                }
            }
        }
    }

我希望这是有道理的,并感谢任何人都可以给我的任何帮助

1 个答案:

答案 0 :(得分:0)

如果你改变了它应该有用:

Array.Copy(itemsArray, selectedIndex, selectedItemsArray, 0, 7);
displayItems(selectedItemsArray);

for(int i=0; i<7; i++)
{
    selectedItemsArray[i] = itemsArray[(i+selectedIndex)%itemsArray.Length];
}

另外,您可能需要确保KeyDown处理程序中的selectedIndex不低于0

case Keys.Left:
{
    if(selectedIndex!=0)
    {
        selectedIndex--;
    }
    else
    {
        selectedIndex = itemsArray.Length-1;
    }
    callItems();
    break;
}

右侧也是如此

case Keys.Right:
{
    if(selectedIndex != itemsArray.Length-1)
    {
        ++selectedIndex;
    }
    else
    {
        selectedIndex = 0;
    }
    callItems();
    break;
}

除此之外,如果itemsArray中根本没有任何项目,我会确保不会解雇这些项目,因为它不会起作用。