0

我试图创建一个程序的一部分,其中用户按下一个按钮并将图像放置在 9 个图片框之一中。每次单击按钮时,应选择不同的图片框。但是,在我开始之前,我无法让我的方法看到我试图通过它的数组。

我有 2 个数组,Slots 和 SlotsUsed,我试图在程序启动时初始化它们。但是,当我尝试将它们传递给在“Button1”中调用的方法“randomBox”时,Visual Studio 说它们不存在。如何使这些数组在我的代码中可见?

非常感谢安东尼

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 pin_program
{
    public partial class Mainscreen : Form
    {
        //Sets where users files are to be stored (for later use)
        string activeDir = @"C:\Users\Tony\Downloads\Programs\pin program\Users";

        public Mainscreen()
        {
            InitializeComponent();
        }

        //method to generate random number
        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }

        public void randomBox(int pictureVal, PictureBox[] Slots, bool[] SlotsUsed)
        {
            //generate random number
            int j = RandomNumber(0, 9);

            if (SlotsUsed[j] == false)
            {
                // Create image, assign it and set slots value to used
                Image newImage = Image.FromFile(@"C:\Users\Tony\Downloads\Programs\pin program\pin program\pin program\Images\" + pictureVal + ".jpg");
                Slots[j].Image = newImage;
                SlotsUsed[j] = true;
            }
            else
                do
                {
                    j = RandomNumber(0, 9);
                } while (SlotsUsed[j] == false);

            return;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //for use later
            string userName = textBox1.Text;
            //for use later
            label1.Visible = true;

            //test call of method.
            randomBox(1, Slots, SlotsUsed);
        }

        public void Mainscreen_Load(object sender, EventArgs e)
        {
            //array for slots
            PictureBox[] Slots = new PictureBox[9];
            Slots[0] = pictureBox1;
            Slots[1] = pictureBox2;
            Slots[2] = pictureBox3;
            Slots[3] = pictureBox4;
            Slots[4] = pictureBox5;
            Slots[5] = pictureBox6;
            Slots[6] = pictureBox7;
            Slots[7] = pictureBox8;
            Slots[8] = pictureBox9;

            //array for used slots
            bool[] SlotsUsed = new bool[9];
            for (int i = 0; i != (SlotsUsed.Length); i++)
            {
                SlotsUsed[i] = false;
            }
        }
    }
}

编辑:由于某种原因,我似乎无法发表评论,所以我会在这里问。我如何将我的数组声明为实例变量而不是本地变量?实例变量是否有另一个我可能知道的名称?

干杯

4

2 回答 2

2

目前,您将SlotsSlotsUsed作为局部变量声明在Mainscreen_Load. 它们必须是您表单中的实例变量,否则您无法在其他地方引用它们 - 实际上它们在逻辑上不会存在于其他地方。它们是表单状态的一部分,因此它们应该是实例变量。

此外,您生成随机数的方法被破坏了 - 有关更多信息,请参阅我关于随机数的文章。

我还要补充一点,你可能会考虑只使用一个集合,从一开始就对其进行洗牌,然后在你去的时候从中删除项目——这样你就可以很容易地判断出图像何时用完,而你没有必须循环直到找到未使用的插槽。

于 2012-07-16T16:00:14.583 回答
0

好吧,最简单的方法是声明一个字段。

protected PictureBox[] Slots

在您的 Form 类中(在任何方法之外。

于 2012-07-16T16:00:24.363 回答