如何清除 Winforms 中所有已初始化(带代码)标签 类?

How to clear all initialized (with code) label classes in Winforms?

我的代码遍历文件夹中的所有文件,然后为它们制作标签。不过,在此之前,您需要使用 FolderBrowserDialog 打开文件夹。我想这样做:当程序中打开文件夹 ALREADY 时,我可以清除所有这些标签,以便为新一批标签腾出空间。 代码:

foreach(string song in files)
                {
                    

                    Label songLab = new Label();
                    songLab.Padding = new Padding(6);
                    songLab.AutoSize = true;
                    
                    songLab.Location = new Point(prevX + 10, prevY + 20);
                    songLab.Click += (o, e2) =>
                    {
                        MessageBox.Show("You Clicked " + songLab.Text);
                    };
                    songLab.MouseEnter += (o, e3) =>
                    {
                        Cursor = Cursors.Hand;
                        songLab.ForeColor = Color.Red;
                    };
                    
                    songLab.MouseLeave += (o, e4) =>
                    {
                        Cursor = Cursors.Default;
                        songLab.ForeColor = Color.Black;
                    };
                    
                    Controls.Add(songLab);
                    
                    int fileExtPos = song.LastIndexOf(".");
                    var songFixd = song.Substring(0, fileExtPos);
                    
                    
                    prevY += 20;
                    songLab.Text += songFixd + "\n";
                }
    ```

最简单的方法可能是保留一个单独的标签列表:

myLabels.Add(songLab);
Controls.Add(songLab);

然后你可以遍历它并删除标签:

foreach(var label in myLabels){
    Controls.Remove(label);
}

但是,听起来您正在做类似 listview or datagrid 的事情。使用这些可能比手动添加标签更好。您还可以考虑使用完全自定义的控件,您可以在其中自行管理所有绘图和事件处理,而不是依赖现有控件。

我认为您应该使用 groupbox(或类似的控件)。像这样将标签添加到 groupbox

groupBox1.Controls.Add(songLab);

并在像这样批量删除时从 groupbox 中删除:

groupBox1.Controls.Clear();