PictureBox select 方向键切换

PictureBox select switchnig with arrow keys

我需要帮助我有一组 PictureBox (40),我需要 select 这些带有箭头的图片框。我的意思是,当我在第一张图片上并按向右箭头键(边框更改 - selected)时,第一张图片的边框应切换为 none,下一张切换为边框 FixedSingle。

一个想法是:

if (keyData == Keys.Right) {
    if (PictureBox1.BorderStyle == BorderStyle.FixedSingle) {
        PictureBox1.BorderStyle = BorderStyle.None;
        PictureBox2.BorderStyle = BorderStyle.FixedSingle;
    } else if (PictureBox2.BorderStyle == BorderStyle.FixedSingle) {
        pictu.....
    }
}

但是这个方法太费时间了,所以我正在寻找更简单的方法。

有人可以帮我找到更简单的方法吗?

编辑新代码:

  namespace testPics

{ public 部分 class Form1 : 表格 {

    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_KeyDown_1(object sender, KeyEventArgs e)
    {
        changePictureBox(e.KeyData);
    }
    List<PictureBox> myPictureBoxes;
    int index;
    public void iniPictureBoxes()
    {
        myPictureBoxes = new List<PictureBox>();
        myPictureBoxes.Add(pictureBox1);
        myPictureBoxes.Add(pictureBox2);
        myPictureBoxes.Add(pictureBox3);

        index = 0;
    }

    public void changePictureBox(Keys keyData)
    {
        myPictureBoxes[index].BorderStyle = BorderStyle.None;

        if (keyData == Keys.Right)
        {
            if (index < myPictureBoxes.Count - 1)
                index++;
        }
        else if (keyData == Keys.Left)
        {
            if (index > 0)
                index--;
        }
        myPictureBoxes[index].BorderStyle = BorderStyle.FixedSingle;
    }}}

您可以创建图片框列表。 然后,例如,您可以添加一个索引器(只是为了简单起见)。 索引器是一个 int(或者在你的情况下可以是一个字节),它存储当前 selected 图片框的索引。 如果用户按下 "right arrow" 键,只需更改当前索引图片框的边框,增加索引器并更新 "the now indexd picturebox".

    List<PictureBox> myPictureBoxes;
    int index;
    public void iniPictureBoxes()
    {
        myPictureBoxes = new List<PictureBox>();
        myPictureBoxes.Add(pictureBox1);
        myPictureBoxes.Add(pictureBox2);
        index = 0;
    }

    public void changePictureBox(Keys keyData)
    {
        myPictureBoxes[index].BorderStyle = BorderStyle.None;

        if(keyData == Keys.Right)
        {
            if(index < myPictureBoxes.Count - 1)
                index++;
        }
        else if(keyData == Keys.Left)
        {
            if(index>0)
                index--;
        }
        myPictureBoxes[index].BorderStyle = BorderStyle.FixedSingle;
    }

这只是设置了边框样式。如果你真的想要select图片框你还需要实现它(picturebox.select();)

一般创建图片框可能会更好。所以你不必手动将它们全部添加到列表中。

这是添加图片框的通用代码(在本例中为 5 个):

public void iniPictureBoxes()
    {
        myPictureBoxes = new List<PictureBox>();
        for (int i = 0; i < 5; i++)
        {
            PictureBox tempPB = new PictureBox();
            tempPB.Location = new Point(i * 15, 10);
            tempPB.Size = new Size(10, 10);
            tempPB.BackColor = Color.Black;
            Controls.Add(tempPB);
            myPictureBoxes.Add(tempPB);
        }
            index = 0;
    }

这里是添加事件的方法:只需双击您想要的事件。 然后会自动为您生成一个方法。你应该把它改成

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        changePictureBox(e.KeyData);
    }