2016-01-15 4 views
0

Я создаю игру в стиле Candy Crush, и я застреваю в точке, где я сделал события кликов для каждого массива изображений (который загружает изображения из ресурса файлы), и я не могу понять, какой код использовать, чтобы щелкнуть по полям. Я не могу использовать e.X или e.Y, потому что это не MouseEventArgs, и не может изменить его на то, потому что тогда метод не будет ссылаться на массив изображений. Я просто хочу сохранить картинку, которую я нажал, в переменную, такую ​​как: d = picturebox[e.X,e.Y].Image;.Попытка найти местоположение мыши, чтобы я мог получить координаты массива изображений

Вот мой код:

public partial class Form1 : Form 
{ 

    Random R = new Random(); 
    int Random; 
    PictureBox[,] picturebox = new PictureBox[8,8]; 


public Form1() 
{ 
    InitializeComponent(); 

    for (int i = 0; i < 8; i++) 
    { 
     for (int j = 0; j < 8; j++) 
     { 
      Random = R.Next(0, 6); 
      if (Random == 0) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.bluetile; 
       //picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 
       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 

       this.Controls.Add(picturebox[i, j]); 
      } 
      if (Random == 1) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.greentile; 
       //picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 

       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 

       this.Controls.Add(picturebox[i, j]); 
      } 
      if (Random == 2) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.orangetile; 
       //picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 
       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 

       this.Controls.Add(picturebox[i, j]); 
      } 
      if (Random == 3) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.purpletile; 
       //picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 
       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 

       this.Controls.Add(picturebox[i, j]); 
      } 
      if (Random == 4) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.redtile; 
       //picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 
       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 

       this.Controls.Add(picturebox[i, j]); 
      } 
      if (Random == 5) 
      { 
       picturebox[i, j] = new PictureBox(); 
       picturebox[i, j].Image = Resource.yellowtile; 
       // picturebox[i, j].Visible = false; 
       picturebox[i, j].Location = new Point(i + (i * 38), j + (j * 38)); 
       picturebox[i, j].Size = new Size(40, 40); 
       picturebox[i, j].BackColor = Color.Transparent; 
       picturebox[i, j].Tag = "0"; 

       this.Controls.Add(picturebox[i, j]); 
      } 

      picturebox[i, j].Click += picturebox_Click; 
     } 
    } 

    this.Refresh(); 
} 


void picturebox_Click(object sender, EventArgs e) 
{ 
    PictureBox temp = sender as PictureBox; 

    Image tem; 
    Image d; 

    // d = picturebox[e.X,e.Y].Image; 
    this.Refresh(); 
} 
+0

Попробуйте 'Image d = temp.Image; ' – LarsTech

ответ

1

Если обрабатывать MouseClick событие вместо этого, вы можете использовать MouseEventArgs:

picturebox[i, j].MouseClick += picturebox_MouseClick; 

, а затем:

void picturebox_MouseClick(object sender, MouseEventArgs e) 
{ 
    // Get the location with e.Location 
}