Stackoverflow unntak på this.ResumeLayout (false);

stemmer
2

Jeg har et problem med et program med en stille feil. Jeg forstår ikke hva det betyr. Det er noe med this.ResumeLayout(false);==> på frominloggen

og vinduet som Popps opp sier dette:

Et ubehandlet unntak av type 'System.StackOverflowException' skjedde i System.Windows.Forms.dll

Dette er min main ():

namespace Gip_info_Benny
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frominloggen());
        }
    }
}

dette er min kode for frominloggen

        public frominloggen()
        {
            InitializeComponent();

            timer1.Start(); 


            initialiseerDB();
            eersteForm = new frominloggen();
            tweedeForm = new FrmWelkom();
            derdeForm = new FrmKijkafwezighedenEnloonberekeningNa();
            vierdeForm = new FrmBekijklonen();
            vijfdeForm = new FrmKijkPersoneelsGegevensNaEnPasAan();
            zesdeForm = new FrmVoegPersoneelslidToe();
            zevendeForm = new FrmVerwijderPersoneelslid();
            achtsteFrom = new FrmPersoneelsgegevensWijzigenUitvoeren();

            txtPaswoordInvoeren.PasswordChar = '*';
        }

        private void initialiseerDB()
        {
            cnnGip = new SqlConnection();
            cnnGip.ConnectionString = @Data Source=BENNYLAPTOP\SQLEXPRESS;
        }

        private void frominloggen_Load(object sender, EventArgs e)
        {
            MenuStrip strip;
            strip = new MenuStrip();

            ToolStripMenuItem keuze1, keuze2, keuze3, keuze4, keuze5;
            keuze1 = new ToolStripMenuItem(&Home);
            keuze2 = new ToolStripMenuItem(&Afwezigheden/Loonberekening);
            keuze3 = new ToolStripMenuItem(&Bekijk lonen);
            keuze4 = new ToolStripMenuItem(&Personeelsgegevens wijzigen);
            keuze5 = new ToolStripMenuItem(&Toevoegen/Verwijderen);
            keuze5.DropDownItems.Add(Toevoegen personeelslid, null, a_click);
            keuze5.DropDownItems.Add(Verwijderen personeelslid, null, b_click);
            strip.Items.Add(keuze1);
            strip.Items.Add(keuze2);
            strip.Items.Add(keuze3);
            strip.Items.Add(keuze4);
            strip.Items.Add(keuze5);
            this.Controls.Add(strip);
        }
        private void a_click(object sender, EventArgs e)
        {
            zesdeForm.ShowDialog();
        }

        private void b_click(object sender, EventArgs e)
        {
            zevendeForm.ShowDialog();
        }

        private void btnInlogen_Click(object sender, EventArgs e)
        {
            SqlCommand scmdcontroleergebruiker;
            scmdcontroleergebruiker = new SqlCommand();
            scmdcontroleergebruiker.Connection = cnnGip;
            scmdcontroleergebruiker.CommandType = CommandType.Text;
            scmdcontroleergebruiker.CommandText = SELECT GebruikersNaam,Paswoord FROM Tbl_Account WHERE GebruikersNaam = ' + txtGebruikersnaamInvoeren.Text + ' , Paswoord = ' + txtPaswoordInvoeren.Text + ';;

            SqlDataReader sdrReadGebuiker;
            cnnGip.Open();
            sdrReadGebuiker = scmdcontroleergebruiker.ExecuteReader();

            int teller = 0;

            while (sdrReadGebuiker.Read())
            {
                teller += 1;
            }
            if (teller == 1)
            {
                MessageBox.Show(Gebruikersnaam en paswoord correct);
                tweedeForm.Naamgebruiker(txtGebruikersnaamInvoeren.Text); //is makkelijker als het werkt
                tweedeForm.ShowDialog();
                this.Hide();
            }
            else if (teller > 0)
            {
                MessageBox.Show(Gebruiker niet in gebruik);
            }
            else
            {
                MessageBox.Show(Gebruikersnaam of pasword niet correct);
            }

            txtGebruikersnaamInvoeren.Clear();
            txtPaswoordInvoeren.Clear();
            sdrReadGebuiker.Close();
            cnnGip.Close();
        }

        private void frominloggen_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dialog = MessageBox.Show(Wil u het programma sluiten?, Sluiten, MessageBoxButtons.YesNo);
            if (dialog == DialogResult.Yes)
            {
                Application.Exit();
            }
            else if (dialog == DialogResult.No)
            {
                e.Cancel = true;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime DatumTijd = DateTime.Now;
            lblHuidigetijd.Text = DatumTijd.ToString();
        }
    }
}

Og dette er min komponent ():

namespace Gip_info_Benny
{
    partial class frominloggen
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name=disposing>true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.txtGebruikersnaamInvoeren = new System.Windows.Forms.TextBox();
            this.label2 = new System.Windows.Forms.Label();
            this.btnInlogen = new System.Windows.Forms.Button();
            this.txtPaswoordInvoeren = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.lblHuidigetijd = new System.Windows.Forms.Label();
            this.timer1 = new System.Windows.Forms.Timer(this.components);
            this.SuspendLayout();
            // 
            // txtGebruikersnaamInvoeren
            // 
            this.txtGebruikersnaamInvoeren.Location = new System.Drawing.Point(644, 137);
            this.txtGebruikersnaamInvoeren.Name = txtGebruikersnaamInvoeren;
            this.txtGebruikersnaamInvoeren.Size = new System.Drawing.Size(100, 20);
            this.txtGebruikersnaamInvoeren.TabIndex = 6;
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(567, 186);
            this.label2.Name = label2;
            this.label2.Size = new System.Drawing.Size(54, 13);
            this.label2.TabIndex = 9;
            this.label2.Text = Paswoord;
            // 
            // btnInlogen
            // 
            this.btnInlogen.Location = new System.Drawing.Point(649, 220);
            this.btnInlogen.Name = btnInlogen;
            this.btnInlogen.Size = new System.Drawing.Size(95, 41);
            this.btnInlogen.TabIndex = 5;
            this.btnInlogen.Text = Inloggen;
            this.btnInlogen.UseVisualStyleBackColor = true;
            this.btnInlogen.Click += new System.EventHandler(this.btnInlogen_Click);
            // 
            // txtPaswoordInvoeren
            // 
            this.txtPaswoordInvoeren.Location = new System.Drawing.Point(644, 183);
            this.txtPaswoordInvoeren.Name = txtPaswoordInvoeren;
            this.txtPaswoordInvoeren.Size = new System.Drawing.Size(100, 20);
            this.txtPaswoordInvoeren.TabIndex = 7;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(537, 140);
            this.label1.Name = label1;
            this.label1.Size = new System.Drawing.Size(84, 13);
            this.label1.TabIndex = 8;
            this.label1.Text = Gebruikersnaam;
            // 
            // lblHuidigetijd
            // 
            this.lblHuidigetijd.AutoSize = true;
            this.lblHuidigetijd.Font = new System.Drawing.Font(Microsoft Sans Serif, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lblHuidigetijd.Location = new System.Drawing.Point(793, 411);
            this.lblHuidigetijd.Name = lblHuidigetijd;
            this.lblHuidigetijd.Size = new System.Drawing.Size(0, 20);
            this.lblHuidigetijd.TabIndex = 10;
            // 
            // frominloggen
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(866, 457);
            this.Controls.Add(this.lblHuidigetijd);
            this.Controls.Add(this.txtGebruikersnaamInvoeren);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.btnInlogen);
            this.Controls.Add(this.txtPaswoordInvoeren);
            this.Controls.Add(this.label1);
            this.Name = frominloggen;
            this.Text = frominloggen;
            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frominloggen_FormClosing);
            this.Load += new System.EventHandler(this.frominloggen_Load);
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox txtGebruikersnaamInvoeren;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Button btnInlogen;
        private System.Windows.Forms.TextBox txtPaswoordInvoeren;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label lblHuidigetijd;
        private System.Windows.Forms.Timer timer1;
    }
}
Publisert på 28/04/2015 klokken 06:58
kilden bruker
På andre språk...                            


1 svar

stemmer
6

Problemet er at du ringer eersteForm = new frominloggen();i konstruktøren av frominloggenklassen. Det faller i uendelig loop, fordi new frominloggen()vil kalle konstruktøren av frominloggenklassen igjen og så videre ....

For å oppdage dette, du trenger bare å bruke debugger i IDE; for eksempel hvis jeg gjorde en standard WinForms app og reprodusere feilen:

    public Form1()
    {
        InitializeComponent();

        var frm = new Form1();
    }

Nå trykker play ( f5) og få app til å eksplodere i den forventede måten. Den debugger bør avbryte oss for å fortelle oss om stack-overløp; kan vi nå få opp kallstakken ( ctrl+ d, c); dette ser noe sånt under:

Ring-stabel og viser rekursive Form1 () anrop

Hver linje i anrops-stabelen er et annet lag av ringer; slik at Form1()konstruktøren (linje 19) er ringer av Form1()konstruktøren, som anroper Form1()konstruktøren. På toppen er det vanligvis noe annet, som bare forteller oss hva den gjør når den gikk tom for plass. Og hvis vi ser på linje 19 i Form1()konstruktør, er det:

var frm = new Form1();

Og det er hvordan du undersøke en stack-overløp. Forresten, kan du dobbeltklikke på en linje i call-stack vinduet for å gå direkte til at call-området, inkludert muligheten til å lese noen lokale variabler (etc) i at metoden - slik at du kan diagnostisere hva som skjer på hvert trinn i rekursjonen (nyttig hvis du er bevisst arbeider med objekt trær / grafer, eller knyttet lister).

Svarte 28/04/2015 kl. 07:17
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more