我正在尝试为我正在开发的游戏创建一个菜单.这是源代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Racing_Manager
{
public partial class Form1 : Form
{
Form1 form1 = new Form1();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
//Exit Button
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
//Help Button
private void Help_Click(object sender, EventArgs e)
{
}
//Play Button
private void Play_Click(object sender, EventArgs e)
{
Hide();
Form2 secondMenu = new Form2();
secondMenu.Show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有:
namespace Racing_Manager
{
public partial class Form2 : Form
{
public Form2 form2 = new Form2();
public Form2()
{
InitializeComponent();
}
//Back Button
private void button2_Click(object sender, EventArgs e)
{
Hide();
Form1 form1 = new Form1();
form1.Show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它在这一行上给出了一个System.StackOverflowException(我知道,非常合适):
Form1 form1 = new Form1();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我如何解决它?我能做些什么来提高代码质量?
你的问题出在第一行:
public partial class Form1 : Form
{
Form1 form1 = new Form1();
Run Code Online (Sandbox Code Playgroud)
这条线应该做什么?
当您创建Form1它的实例时,会初始化其成员.在这里,您声明了一个form1通过创建新实例来初始化的成员Form1.
当您创建Form1它的实例时,会初始化其成员.在这里,您声明了一个form1通过创建新实例来初始化的成员Form1.
当您创建Form1它的实例时,会初始化其成员.在这里,您声明了一个form1通过创建新实例Form1来初始化的成员.
当您创建Form1它的实例时,会初始化其成员.在这里,您声明了一个form1通过创建新实例Form1来初始化的成员.
当您创建Form1它的实例时,会初始化其成员.在这里,您声明了一个form1通过创建新实例来初始化的成员.Form1
StackOverflowException
因为你递归调用构造函数,Form1所以你的调用栈最终会运行完全.
同样的道理Form2.
结论:从你的Form1班级(和那个班级)中删除这一行Form2,你无论如何都不需要它.
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |