如何在 class 中创建 form1 的实例并在 form1 中创建 class 的实例?

How can I make instance of form1 in a class and make instance of the class in form1?

在 form1 构造函数中:

public Form1()
        {
            InitializeComponent();

            LoadFile(textBoxRadarPath, "radarpath.txt");
            LoadFile(textBoxSatellitePath, "satellitepath.txt");

            CheckIfImagesExist();

            if (pictureBox1.Image == null || pictureBox2.Image == null)
            {
                trackBar1.Enabled = false;
            }

            tracker = new DownloadProgressTracker(50, TimeSpan.FromMilliseconds(500));
            label1.Location = new Point(progressBar1.Width / 2 - label1.Width / 2, label1.Location.Y);
            lblStatus.Text = "Download Pending";
            lblAmount.Text = "";
            lblSpeed.Text = "";
            
            sat = new Satellite();
            rad = new Radar();

我想将一些东西从 classes 卫星和雷达传递到 Form1,所以我在 Form1 中为 classes 创建实例。

但是在 Form1 顶部我还有这个列表,我想将这个列表从 Form1 传递到 classes 卫星和雷达:

public List<string> folders;

在每个 class 中,我为 Form1 创建了一个实例:

namespace Extract
{
    class Satellite
    {
        private List<string> satelliteUrls = new List<string>();
        private string mainUrl = "https://de.sat24.com/de/eu/infraPolair/";
        private string[] statements;
        Form1 f1 = new Form1();

我想在两个 class 中都使用列表文件夹。

问题是一段时间后我在 classes 中遇到异常,因为它正在做“乒乓球”,它在 class 卫星的 form1 中创建实例,然后在卫星中创建实例form1 然后返回到 form1 再次创建 classes 的实例,然后返回到 form1 的 classes 实例,依此类推。

如何在两个 classes 中使用 Form1 中的列表文件夹?

如果您在 Form1 中关心的只是名为文件夹的列表,那么只需在其他两个 classes 中的每一个中创建一个类似的容器变量,然后通过传递它们来设置这些变量的值在 classes 的实例化过程中从 Form1 class 输入。下面是 classes 的样子:

class Satellite
{
    private List<string> satelliteUrls = new List<string>();
    private string mainUrl = "https://de.sat24.com/de/eu/infraPolair/";
    private string[] statements;
    public List<string> folders = null;

    Satellite (List<string>inputFolders)
    {
        folders = inputFolders;
    }
}

class Radar
{
    public List<string> folders = null;

    Radar(List<string> inputFolders)
    {
        folders = inputFolders;
    }
}

然后要创建这些 classes,您可以在 Form1 实例化中执行此操作:

public Form1()
{
    InitializeComponent();

    LoadFile(textBoxRadarPath, "radarpath.txt");
    LoadFile(textBoxSatellitePath, "satellitepath.txt");

    CheckIfImagesExist();

    if (pictureBox1.Image == null || pictureBox2.Image == null)
    {
        trackBar1.Enabled = false;
    }

    tracker = new DownloadProgressTracker(50, TimeSpan.FromMilliseconds(500));
    label1.Location = new Point(progressBar1.Width / 2 - label1.Width / 2, label1.Location.Y);
    lblStatus.Text = "Download Pending";
    lblAmount.Text = "";
    lblSpeed.Text = "";

    sat = new Satellite(folders);
    rad = new Radar(folders);
}

因此,当窗体被实例化时,您将该文件夹列表传递到其他两个对象的实例化中,然后它们将可以访问它们。这是否回答了您的问题?