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 :frowning:.Mọi người giải thích cho mình với !!!

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

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!

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

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.

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? :confused:

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

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