30/09/2018, 17:19

[C#] 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 ạ

... viết 19:26 ngày 30/09/2018

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.

Sáng Béo viết 19:31 ngày 30/09/2018

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

Sáng Béo viết 19:22 ngày 30/09/2018

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 ạ
Button btn = (Button) sender;

... viết 19:26 ngày 30/09/2018

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

Sáng Béo viết 19:34 ngày 30/09/2018

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 ạ?

... viết 19:25 ngày 30/09/2018

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)

Sáng Béo viết 19:35 ngày 30/09/2018

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 ạ

stackoverflow.com
Krishna Thota

How to access a button using its name as a string in a for loop

c#, winforms
asked by Krishna Thota on 07:33AM - 19 Oct 12

Chữ Thập Đỏ viết 19:34 ngày 30/09/2018

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;
}

Bài liên quan
0