首页 > 解决方案 > 使用此代码时```Form1 form = new Form1();``` 出现问题

问题描述

我正在尝试使用代码form.mainPnl.Controls.Add(background);,其中 mainPnl 是我添加到 Form1 的面板,我只是用作基础,并且在调试期间正在创建背景。

var background = new Panel
{
Name = "background",
Dock = DockStyle.Fill,
BackColor = Color.Black,
};

我在一个副类中工作(不知道它叫什么。它只是不是基类)这意味着我不能使用 mainPnl 面板中的任何东西而不从 Form1 获取它,所以我需要使用Form1 form = new Form1();但每当我使用它时,我认为它是循环和使程序崩溃。

主类:

public partial class Form1 : Form
    {
        public Panel mainPnl
        {
            get
            {
                return mainPanel;
            }
        }
        public TextBox textbox
        {
            get
            {
                return hey;
            }
        }

        Menu menu = new Menu();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            menu.Main();
        }

        private void Update_Tick(object sender, EventArgs e)
        {

        }
    }

边课:

class Menu
    {
        Form1 form = new Form1();

        public void Main()
        {
            createObjects();
        }

        public void createObjects()
        {
            var background = new Panel
            {
                Name = "background",
                Dock = DockStyle.Fill,
                BackColor = Color.Black,
            };
            form.mainPnl.Controls.Add(background);
        }
    }

那是唯一的代码。但是当我运行代码时,它会显示一个错误并突出显示该代码并说“抛出了'System.StackOverflowException'类型的异常”

标签: c#.netwinforms

解决方案


在您的表格中,您有:

public partial class Form1 : Form
{
    Menu menu = new Menu();
}

在你的Menu课堂上,你有:

class Menu
{
    Form1 form = new Form1();
}

当您实例化您的表单时,它会创建一个菜单,该菜单会实例化一个新表单,该表单会创建一个新菜单,依此类推,直到您用完相互递归构造函数的堆栈空间。

除了为什么会出现堆栈溢出之外,我不确定您到底要做什么,或者您的问题是什么,所以就这样吧!


推荐阅读