我正在尝试致电表格
public partial class MenuForm : Form
{
Ventanas v = new Ventanas();
EnfermoRep reporteEnfermo = new EnfermoRep();
public MenuForm()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void rptEnfermo_Click(object sender, EventArgs e)
{
v.CargarVentana(reporteEnfermo, this.panel1);
}
}
但是当我运行它时,当我实例化“ EnfermoRep”时,标记为“引发了'System.StackOverflowException'类型的异常。”
这是另一堂课
public partial class EnfermoRep : Form
{
Ventanas v = new Ventanas();
MenuForm menuForm = new MenuForm();
public EnfermoRep()
{
InitializeComponent();
}
private void EnfermoRep_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'bd.Enfermo' table. You can move, or remove it, as needed.
this.EnfermoTableAdapter.Fill(this.bd.Enfermo);
this.reportViewer1.RefreshReport();
}
private void btnVolver1_Click(object sender, EventArgs e)
{
v.CargarVentanas(menuForm, this.enfermoRep);
}
}
我也正在使用它,所以我可以以一种形式在面板之间切换:
class Ventanas
{
public void CargarVentana(object sonform, Panel panel)
{
panel.Controls.Clear();
Form fh = sonform as Form;
fh.TopLevel = false;
fh.FormBorderStyle = FormBorderStyle.None;
fh.Dock = DockStyle.Fill;
panel.Controls.Add(fh);
panel.Tag = fh;
fh.Show();
}
}
在我制作的每种表格中,我都将一个面板底座放置在容器中,因此可以使用“ Ventana”类来调用它
任何想法如何解决该错误。谢谢! :D
答案 0 :(得分:1)
希望我没错,但是一个简单的解决方法(可能不是一个好方法)将是:
public partial class MenuForm : Form
{
Ventanas v = new Ventanas();
EnfermoRep reporteEnfermo;
public MenuForm()
{
InitializeComponent();
reporteEnfermo = new EnfermoRep(this);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void rptEnfermo_Click(object sender, EventArgs e)
{
v.CargarVentana(reporteEnfermo, this.panel1);
}
}
public partial class EnfermoRep : Form
{
Ventanas v = new Ventanas();
MenuForm menuForm;
public EnfermoRep(MenuForm MF)
{
menuForm = MF;
InitializeComponent();
}
private void EnfermoRep_Load(object sender, EventArgs e)
{
this.EnfermoTableAdapter.Fill(this.bd.Enfermo);
this.reportViewer1.RefreshReport();
}
private void btnVolver1_Click(object sender, EventArgs e)
{
v.CargarVentanas(menuForm, this.enfermoRep);
}
}
虽然不确定是否可以整体解决您的问题,但确实可以消除stackoverflow。这只是一个很小的变化。您只需将MenuForm作为参数传递,而不是在EnfermoRep类内部创建一个新的参数。在此解决方案中,必须首先创建MenuForm。能够进行必要的更改以首先创建EnfermoRep并不困难。我将把它留为任务;)
答案 1 :(得分:0)
构造MenuForm
时,此代码运行:
EnfermoRep reporteEnfermo = new EnfermoRep();`
构造EnfermoRep
时,此代码运行:
MenuForm menuForm = new MenuForm();
您最终将永远递归。如果查看“堆栈”面板,您将看到堆栈先创建EnfermoRep
,然后再创建MenuForm
,并永久重复该顺序。您需要整理代码。通常,如果要同时运行两个表单,请在其他地方(例如,在Main
例程中)创建两个表单,然后从那里运行它们。