我遇到了一个带有无提示错误的程序的问题。我不明白这意味着什么。这是this.ResumeLayout(false);
==>的内容来自frominloggen
弹出的窗口说:
类型'System.StackOverflowException'的未处理异常 发生在System.Windows.Forms.dll
中
这是我的主要():
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());
}
}
}
这是我的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();
}
}
}
这是我的组件():
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;
}
}
答案 0 :(得分:6)
问题是您在eersteForm = new frominloggen();
类的构造函数中调用了frominloggen
。它属于无限循环,因为new frominloggen()
将再次调用frominloggen
类的构造函数,依此类推......
要检测到这一点,您只需要在IDE中使用调试器;例如,如果我制作了标准的winforms应用程序并重现您的错误:
public Form1()
{
InitializeComponent();
var frm = new Form1();
}
现在按播放( f5 )并让应用以预期的方式爆炸。调试器应该打断我们告诉我们堆栈溢出;我们现在可以调出调用堆栈( ctrl + d , c );这看起来如下所示:
调用堆栈中的每一行都是一个不同的调用层;所以Form1()
构造函数(第19行)正在调用Form1()
构造函数,它正在调用Form1()
构造函数。在最顶端通常有不同的东西,只是告诉我们当它用完空间时它正在做什么。如果我们查看Form1()
构造函数中的第19行,那么它是:
var frm = new Form1();
是你调查堆栈溢出的方法。顺便提一下,您可以双击调用堆栈窗口中的任何一行直接跳转到该调用站点,包括能够读取该方法中的任何局部变量(等) - 这样您就可以诊断每个步骤中发生的情况在递归中(如果您有意处理对象树/图表或链接列表,则非常有用)。