使用变量移动数组

时间:2017-04-24 10:01:15

标签: c# arrays winforms

我有一个4个按钮列表,我在表单中显示,我有一个单词列表(没有设置字数限制)。表单开始时,单词列表中的第4个单词出现在按钮上(每个按钮一个单词)。我还有两个更小的按钮,用于滚动左侧或右侧较大按钮上的文本值(单词)。

下面,在scrollRightButton_Click方法中,单词成功向左移动(向右滚动),更改按钮列表中按钮的文本值。

但是,在scrollLeftButton_Click方法中,文本值不会向左滚动回到单词列表的开头。

我使用名为shiftCount的变量来提供索引的移位。这可能是也可能不是问题。我对使用数组索引的规则不太熟悉。我向控制台写入了shiftCount的值,因此你可以看到当点击右边时值上升,当点击左边时下降,但是当点击左边时,这个int值似乎没有变化。

我认为问题很简单,但我似乎无法成功google一个有效的解决方案。任何帮助将不胜感激。

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.IO;
using System.Windows.Forms;

namespace ButtonScroll
{
    public partial class MainUI : Form
    {
        const string CATSFILE = "categories.dat";

        List<Button> buttonList = new List<Button>();

        string listEntry;

        List<string> cats = File.ReadAllLines(CATSFILE).ToList();

        int shiftCount = 1;



        public MainUI()
        {
            InitializeComponent();

            // Add each button to the list 
            buttonList.Add(catButton1);
            buttonList.Add(catButton2);
            buttonList.Add(catButton3);
            buttonList.Add(catButton4);

            // Add category names to buttons
            for (int i = 0; i < buttonList.Count; i++)
            {
                listEntry = cats[i];
                buttonList[i].Text = listEntry;
            }
        }

        private void scrollRightButton_Click(object sender, EventArgs e)
        {
            int threshhold = cats.Count - 3;

            if (shiftCount < threshhold)
            {
                for (int i = 0; i < buttonList.Count; i++)
                {
                    listEntry = cats[i + shiftCount];
                    buttonList[i].Text = listEntry;
                }
                shiftCount++;
                Console.Write(shiftCount);
            }
        }

        private void scrollLeftButton_Click(object sender, EventArgs e)
        {
            if (shiftCount >= 2)
            {
                shiftCount--;
                for (int i = 0; i < buttonList.Count; i++)
                {
                    listEntry = cats[i + shiftCount];
                    buttonList[i].Text = listEntry;
                }

                Console.Write(shiftCount);
            }
        }
    }
}   

示例categories.dat文件

Drinks
Breakfast
Lunch
Dinner
Dessert
Party
Brunch

1 个答案:

答案 0 :(得分:1)

尝试从int shiftCount = 0;开始 然后设置

private void scrollRightButton_Click(object sender, EventArgs e)  
{
    int threshhold = cats.Count - 3;

    if (shiftCount < threshhold)
    {
        shiftCount++;
        for (int i = 0; i < buttonList.Count; i++)
        {
            listEntry = cats[i + shiftCount];
            buttonList[i].Text = listEntry;
        }
        Console.Write(shiftCount);
    }
}

并在if (shiftCount >= 2)方法

中将if (shiftCount >= 1)更改为scrollLeftButton_Click