Исключение типа 'System.StackOverflowException' было сгенерировано в c # - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь вызвать форму

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);
        }
    } 

, но когда я ее запускаю, появляется метка "Исключение типа 'System.StackOverflowException' было сгенерировано", когда я создаю экземпляр "EnfermoRep".

Это другой класс

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();
        }
}

В каждой форме Imake, я поместил панель док-станции в контейнер, чтобы я мог вызвать ее с помощью класса "Ventana"

Любая идея, как решить эту ошибку.Спасибо!: D

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Надеюсь, я не ошибаюсь, но простое исправление (возможно, не самое удачное) было бы:

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);
    }
}

Не уверен, что это решит вашу проблему в целом, но избавится отпереполнение стека.Это всего лишь небольшое изменение.Вы просто передаете свою MenuForm в качестве параметра, а не создаете новый внутри класса EnfermoRep.В этом решении необходимо сначала создать MenuForm.Нетрудно внести изменения, необходимые для того, чтобы сначала создать EnfermoRep.Я оставлю это как задание;)

0 голосов
/ 29 ноября 2018

Когда вы создаете MenuForm, этот код запускается:

EnfermoRep reporteEnfermo = new EnfermoRep();` 

Когда вы создаете EnfermoRep, этот код запускается:

MenuForm menuForm = new MenuForm();

В конечном итоге вы возвращаетесь навсегда.Если вы посмотрите на панель стека, вы увидите, что стек создает EnfermoRep, а затем MenuForm и повторяет эту последовательность навсегда.Вам нужно будет распутать ваш код.Как правило, если вы хотите запустить обе формы одновременно, создайте две формы где-то еще (например, в вашей подпрограмме Main), а затем запустите их оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...