01/10/2018, 09:38

Gặp vấn đề về dòng code chọn tất cả label trên form

Sau một hồi mò mẫm trên mạng thì mình thấy dòng code này :

private void XoaNoiDung()
{
            if (ctr is Label)
            {
                ctr.Text = "";
            }
            foreach (Control i in ctr.Controls)
            {
                Erase_background_label(i);
            }
}

Dòng code trên vẫn hoạt động bình thường nếu ta dùng nó để thay đổi nội dung của label nhưng nếu đổi nó thành :

private void XoaNenTrangLabel()
{
            if (ctr is Label)
            {
                ctr.Parent = background_img;
            }
            foreach (Control i in ctr.Controls)
            {
                XoaNenTrangLabel()
            }
}

Thì chỉ một số label trên form đổi màu nền thôi,một số khác vẫn màu trắng dù đã chỉnh BackColor là transparent .Mọi người giải thích cho mình với !!!

Quân viết 11:41 ngày 01/10/2018

2 code khác nhau hoàn toàn, 1 bên có truyền child 1 bên chỉ gọi lại chính hàm đó, mà cũng lạ, code 2 thế mà không bị stackoverflow

newbie lập trình viết 11:50 ngày 01/10/2018

MÌnh viết thiếu đó bạn.Ở code 2 phải là XoaNenTrangLabel(i).Nếu viết như vậy nó vẫn bị lỗi nói trên.Bạn giúp mình khắc phục với!

Văn Dương viết 11:47 ngày 01/10/2018

Đây là một trong những lý do mình bỏ Winform

Quân viết 11:44 ngày 01/10/2018

ctr.Parent = background_img;

Bạn có chắc đoạn lệnh dùng để xóa nền trắng này là đúng
Đây là description cho dòng lệnh bạn vừa viết nhé, xem xem có gì bất hợp lí không

Gets or sets the parent container of the control.

newbie lập trình viết 11:52 ngày 01/10/2018

Mình xóa nền trắng riêng lẻ từng label với dòng code ấy nó vẫn ra kết quả đúng mà :3.Vấn đề là tại sao làm nhiều cái cùng lúc thì nó lại cái có cái không?

Quân viết 11:53 ngày 01/10/2018

Đơn giản là vì đoạn lệnh bạn đang dùng không được thiết kế để làm việc đó

Bài liên quan
0