01/10/2018, 00:34
Kiểm tra Sự kiện click của 2 button, random hình ảnh từ 1 thư mục vào mảng động Button
Tình hình em đang làm đồ án cuối kỳ game Trúc Xanh. Trức mắt em tạo được mảng button động với gắn mỗi button 1 sự kiện click rồi. Nhưng trong hàm click làm sao để em xử lý 2 click 1 cái click trước, 1 cái click sau trong ùng 1 method vậy mọi người.
Tiếp đó là random ảnh từ 1 thư mục vào các mảng button này. Em chỉ biết random 1 lần, còn nếu random lại thì mấy cái hình nó nhảy lộn xộn, tức là hình ban đầu lại random ra hình khác.
Em cảm ơn!
//Hàm create Button
private void dễToolStripMenuItem_Click(object sender, EventArgs e)
{
soTX = 4;
bt = new Button[soTX][];
for(int i=0; i<soTX; i++)
{
bt[i] = new Button[soTX];
}
int top = 50; //Giá trị Location Top
for (int i = 0; i < soTX; i++)
{
int Left = 50; //Giá trị Location Left
for (int j = 0; j < soTX; j++)
{
bt[i][j] = new Button();
//Thêm cài đặt cho button
bt[i][j].Name = "Button" + i + " " + j;
bt[i][j].Size = new Size(150, 150);
bt[i][j].Left += Left ;
bt[i][j].Top = top;
bt[i][j].Image = Image.FromFile("background.jpg");
//Tạo sự kiên cho button và gán tới hàm sử lý sự kiện
bt[i][j].Click += new EventHandler(button_Click);
this.Controls.Add(bt[i][j]);
Left += 150;
}
top += 150;
}
}
// Hàm sự kiện button
private void button_Click(object sender, EventArgs e)
{
int id = rd.Next(0, 7);
Button TX = ((Button)sender);
TX.Image = Image.FromFile("matching" + id + ".jpg");
TX.Enabled = false;
ButtonSame();
}
//Hàm kiểm tra button cùng hình
public void ButtonSame()
{
for (int i = 0; i < soTX*soTX -1 ; i++)
{
for (int j = i+1; j < soTX*soTX; j++)
{
if (bt[i%soTX][i/soTX].Enabled == false && bt[j%soTX][j/soTX].Enabled == false)
{
//Nếu 2 button đều đã mở thì kiểm tra tiếp xem tag của 2 button có bằng nhau không, nếu bằng nhau thì xóa button.
if (bt[i % soTX][i / soTX].Tag.ToString() == bt[j % soTX][j / soTX].Tag.ToString())
{
System.Threading.Thread.Sleep(500);
bt[i % soTX][i / soTX].Enabled = true;
bt[j % soTX][j / soTX].Enabled = true;
bt[i % soTX][i / soTX].Visible = false;
bt[j % soTX][j / soTX].Visible = false;
}
else
{
System.Threading.Thread.Sleep(500);
bt[i % soTX][i / soTX].Enabled = true;
bt[j % soTX][j / soTX].Enabled = true;
bt[i % soTX][i / soTX].Image = Image.FromFile("background.jpg");
bt[j % soTX][j / soTX].Image = Image.FromFile("background.jpg");
}
}
}
}
}
Bài liên quan
Vụ click 2 button thì mình có ý kiến thế này.
Tạo 1 biến gọi là clickedButton lưu button vừa được click (null nếu như chưa có button nào đc click)
Lúc click lần thứ 2, nếu button đc click khác clickedButton (tức nó ko cùng là 1 object đó) thì xử lý và reset lại nút clickedButton lại = null.
Mã giã:
Hy vọng đúng ý bạn
Còn vụ random mình chưa hiểu ý của bạn cho lắm.
Thanks bạn để mình test thử. Còn cái random ảnh ý là, mình có 8 ảnh, 16 ô button. làm sao random 8 ảnh đó vào 16 ô(mỗi ảnh 2 lần) để khi mình kiểm tra sự kiện click, 2 ảnh giống nhau thì mình xóa button ấy ^^.
À nếu vậy thì đây là cách của mình:
Tthay vì bạn random ngẫu nhiên, thì hãy load hình ảnh vào button một cách trật tự sau đó đổi các vị trí button này
Còn ko nếu khó khăn trong việc swap button thì bạn lưu hình ảnh hiển vị vô mảng. Vậy có thể tạo ra 1 mảng chứa đường dẫn tới từng hình ảnh. Với mỗi lần khởi tạo là ta chỉ hoán đổi vị trí của mảng này. Sau đó gán bt[i][j].Image = ImageArray[i][j]
Mã giã
EDIT: Ko cần copy mảng phụ
Ok bạn cảm ơn bạn rất nhiều, để mình làm. Còn thắc mắc gì mình sẽ pm ^^