在c#{

时间:2018-11-29 17:08:23

标签: c# visual-studio

我正在尝试致电表格

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

2 个答案:

答案 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例程中)创建两个表单,然后从那里运行它们。