Avatar billede pablopablo Nybegynder
30. januar 2005 - 01:09 Der er 7 kommentarer

StackOverFlowException i dll

Hejsa...

Jeg sidder og roder med en dll jeg har lavet...har tidligere benyttet den...
Har ikke lavet ændringer i den...men nu genererer den en StackOverFlowException hver gang jeg benytter den...selve dll'en kompilerer fint...

Hvad kan der være galt?

mvh. PabloPablo
Avatar billede burningice Nybegynder
30. januar 2005 - 01:25 #1
ja... det er nok kaffen der er blevet kold.

har du noget kode vi kan se?
Avatar billede sorenbs Nybegynder
30. januar 2005 - 01:26 #2
;)
Avatar billede pablopablo Nybegynder
30. januar 2005 - 01:45 #3
hehe...jeg tænkte det måske var en mere generelt fejl, nu hvor den har virket :)
Det er maxLenght og textBox1width som fejler, idet fejlen fosvinder når jeg udkommenterer dem...

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace HeltallTextBox
{
    public class HeltaltextBox : System.Windows.Forms.UserControl
    {
        private System.Windows.Forms.TextBox textBox1;

        private System.ComponentModel.Container components = null;

        public HeltaltextBox()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code

        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // textBox1
            //
            this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.textBox1.Location = new System.Drawing.Point(0, 0);
            this.textBox1.MaxLength = 10;
            this.textBox1.Name = "textBox1";
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "";
            this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
            //
            // HeltaltextBox
            //
            this.Controls.Add(this.textBox1);
            this.Name = "HeltaltextBox";
            this.Size = new System.Drawing.Size(100, 20);
            this.ResumeLayout(false);

        }
        #endregion

        private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            bool ok = validerTekstFeltKunHeltal(e,textBox1);

            if(ok == true)
                e.Handled = true;
        }

        public bool validerTekstFeltKunHeltal(System.Windows.Forms.KeyPressEventArgs e, TextBox tb)
        {
            //HVIS svar returneres indholdende false, er det et gyldigt tegn! Dvs. det bliver skrevet i textfeltet!
            bool svar = false;
            try
            {
                //If-sætningen angiver kriteriet for hvad der skal til / opfyldes før et tegn er ulovligt og dermed IKKE bliver skrevet i tekstfeltet!
                //I dette tilfælde er det tal og backspace
                if(!Char.IsDigit(e.KeyChar) && e.KeyChar !=(char)8)
                    svar = true;                     
            }
            catch(Exception){}

            return svar;
        }

        public int maxLength
        {
            get{return this.maxLength;}
           
            set
            {
                try
                {
                    int test = (int)value;
                    this.maxLength=test;
                }
                catch(Exception)
                {
                    MessageBox.Show("maxLength må kun være et heltal", "Ugyldig længde",
                        MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
            }
        }

        //Property som sætter Fonten
        public Font textBox1Font
        {
            get{return textBox1.Font;}
               
            set
            {
                try
                {
                    Font test = (Font)value;
                    textBox1.Font = value;
                   
                    this.Height = textBox1.Height;
                }
                catch(Exception){}
            }   
        }

        //Property som sætter bredden
        public int textBox1Width
        {
            get{return textBox1.Width;}
               
            set
            {
                try
                {
                    int test = (int)value;
                    this.Width = test;
                    textBox1.Width = test;
                }
                catch(Exception)
                {
                    MessageBox.Show("textBox1Width må kun være et heltal", "Ugyldig bredde",
                        MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
            }   
        }
    }
}
Avatar billede lifo Nybegynder
30. januar 2005 - 08:30 #4
kan ikke finde en definition på maxLength

tror der er fejl i din maxLength property

skal det måske ikke være

public int maxLength
{
get{return textBox1.maxLength;}
set
{
try
{
int test = (int)value;
textBox1.maxLength=test;
}
catch(Exception)
{
MessageBox.Show("maxLength må kun være et heltal", "Ugyldig længde",
                        MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
Avatar billede erikjacobsen Ekspert
30. januar 2005 - 08:54 #5
Eller måske

private int maxLength;  //<-- mangler
public int MaxLength    // <-- stort M
{
  get{return this.maxLength;}
  //...osv
           
Som det er nu kalder din property sig selv - så vidt jeg kan se
Avatar billede pablopablo Nybegynder
30. januar 2005 - 15:02 #6
lifo >> du har ret...Jeg må ha' sovet et øjeblik ;)
jeg havde jo allerede lavet de andre properties på denne måde...såå...%-)...

erikjacobsen>>ja, du har nok også ret i at propertyen skal hedde noget andet for at undgå navnesammenfald...(ligesom jeg har gjort i de resterende properties :)

Nu ser koden således ud :

public int textbox1MaxLength
        {
            get{return textBox1.MaxLength;}
            set
            {
                try
                {
                    int test = (int)value;
                    textBox1.MaxLength=test;
                }
                catch(Exception)
                {
                    MessageBox.Show("textbox1MaxLength må kun være et heltal", "Ugyldig længde",
                        MessageBoxButtons.OK,MessageBoxIcon.Error);
                }
            }
        }

og det virker! :)
Så det var en kombination af jeres svar...så vi deler div. points :)

Så, læg et svar og tak for hjælpen...
Avatar billede erikjacobsen Ekspert
30. januar 2005 - 15:20 #7
Ingen point til mig, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester