Làm thế nào để làm việc với button sinh ra nhờ vòng lặp?

E dùng vòng for để tạo các button như sau:

for (int i = 0; i < 20; i++)
    for (int j = 0; j < 50; j++)
    {
        Button square = new Button();
        square.Width = 20;
        square.Height = 20;
        square.Top = 20 * i;
        square.Left = 20 * j;
        square.Name = "square" + "_" + i.ToString() + "_" + j.ToString();
        square.BackColor = System.Drawing.Color.Transparent;
        square.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        square.Click += new System.EventHandler(this.square_Click);
        this.Controls.Add(square);
    }

Giờ e không biết làm thế nào trong phương thức square_Click để đổi màu cho button khi mình click vào ạ :frowning:

Trong C++ của Qt hay C# mình thấy có cái gọi là object::sender(). Bạn thử tìm hiểu xem.

2 Likes

e thử sender không thay đổi đc ạ :frowning:

A, e tìm được cách rồi ạ, e tạo 1 button mới rồi gán ép kiểu button cho sender là dùng đc ạ :smiley:
Button btn = (Button) sender;

1 Like

Mình thấy khi ép kiểu cho sender người ta thường dùng static_cast hơn là dùng (type) sender. Cái này mình cũng không rõ có mục đích gì, chắc là liên quan đến việc ép kiểu cho lớp được thừa kế gì đó.
Triệu hồi @ltd vào giải thích :stuck_out_tongue_closed_eyes:

2 Likes

Vấn đề nữa là e muốn làm việc với 1 button nào đó trong này mà chỉ niết name của nó là square_1_1 chẳng hạn thì làm thế nào ạ?

Sau khi ép kiểu sender về button rồi thì có thể lấy thuộc tính text của button sender để check, button có text nào thì sẽ thực hiện công việc tương ứng chẳng hạn… (Text này ko phải là tên đối tượng, mà là cái text đc chỉnh sửa trên button ấy)

2 Likes

vâng, nhưng ý e là ví dụ cái sender của e là square_3_3, giờ e muốn square_0_0 đến square_3_3 đều có text là x thì phải làm sao ạ?
E đã tách đc chỉ số của square_3_3 ra rồi ạ, sau đó vòng lặp nên viết thế nào để làm việc đc với square_i_j ạ?


a, e lại tìm được rồi ạ :smile:

3 Likes

bạn làm thế này xem có được không?

square.Tag = j;
square.Name = j.tostring();

qua sự kiện click
if ((int) (sender as Button).tag.Tostring() == (sender as bUtton).Name)
{
(sender as BUtton).backColor = Color.Red;
}

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?