2012-07-16 63 views
0

我試圖創建程序的一部分,其中用戶按下按鈕並將圖像放置在9個圖片框之一中。每次點擊按鈕時,都應該選擇不同的圖片框。然而,在我開始之前,我無法讓我的方法看到我想要傳遞的數組。將數組傳遞給事件C中的方法#

我有2個數組,插槽和插槽使用,我試圖在程序啓動時將它們初始化。但是,當我嘗試將它們傳遞給在「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; 
      } 
     } 
    } 
} 

編輯: 我不似乎能夠發表評論,出於某種原因,所以我只是在這裏問。我將如何將數組聲明爲實例變量而不是本地?實例變量是否有另一個我可能知道的名字?

歡呼

+0

您可以參考[此(作用域在MSDN(C#))](http://msdn.microsoft.com/en-us/ library/aa691132(v = vs.71).aspx) – 2012-07-16 16:02:14

回答

2

目前你在Mainscreen_Load聲明SlotsSlotsUsed當地變量。他們需要在您的表單中使用實例變量,否則您無法在其他地方引用它們 - 事實上,它們在其他地方不會在邏輯上存在。它們是表單狀態的一部分,所以它們應該是實例變量。

此外,您的生成隨機數的方法被破壞 - 請參閱我的article on random numbers瞭解更多信息。

我還想補充一點,你可能會考慮只使用一個集合,將它打亂並開始,然後隨時移除項目 - 通過這種方式,您可以輕鬆地分辨何時您已經用完了圖像,並且您不必循環,直到找到未使用的插槽。

+0

你能提供一個快速的例子來說明如何做到這一點,它聽起來很有用,但是我找不到一個例子。Cheers – 2012-07-16 16:36:31

+0

@TonyGildea:多少錢你瞭解不同種類的變量嗎?聽起來你應該閱讀一本書或教程中的實例變量與本地變量。 – 2012-07-16 18:08:17

0

好吧,最簡單的方法是聲明一個字段。

protected PictureBox[] Slots 

您的Form類中(在任何方法以外。