我有一个包含许多项目的主数组,例如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;
}
}
}
}
}
我希望这是有道理的,并感谢任何人都可以给我的任何帮助
答案 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
中根本没有任何项目,我会确保不会解雇这些项目,因为它不会起作用。