Autor Beitrag
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Mo 21.03.16 14:34 
Hallo,

ich wollte bei Eingabe von Text in eine Textbox per textChanged Event die Eingabe durch ein Sternchen ersetzen (Passwort Eingabe). Allerdings passiert, wenn ich einen Buchstaben eingebe, für kurze Zeit nichts, gefolgt von einer StackOverflowException. Die Sternchen füge ich durch einen StringBuilder hinzu
Code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void textBoxPassword_TextChanged(object sender,EventArgs e)
{
    this.passwordText += Convert.ToString(this.textBoxPassword.Text[this.textBoxPassword.Text.Length-1]);
    this.textBoxPassword.Text = new StringBuilder().Insert(0,"*", passwordText.Length).ToString();
}

Das Kuriose ist, wenn ich this.textBoxPassword.Text = "..." mache, kommt auch ein StackOverflow.

Was ist da schon wieder los?

Anmerkung: Ich wei0 nicht ob es wichtig ist, aber die Textbox verfügt über 2 textChanged-Events, aber daran kann's ja (eigentlich) nicht liegen
frankyboy1974
Hält's aus hier
Beiträge: 4
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.03.16 14:50 
hallo,

wie kann man ganz leicht eine StackOverflowException erreichen?
Indem man eine Funktion schreibt die sich (unendlich oft) wieder selbst aufruft. Irgendwann ist der Stack dann voll und es kommt besagte Fehlermeldung.

Dein Insert ruft also wiederum das Onchange auf, dort wird wieder ein insert aufgerufen, was wiederum das Onchange aufruft, und so weiter.

Ich weiss nicht wie das in C# ist, aber viele Programmiersprachen haben ein 'Password-Char', das man bei einem Editfeld angeben kann. Dann erfolgt das ersetzen automatisch und braucht nicht eigens programmiert werden.

mfg

Für diesen Beitrag haben gedankt: erfahrener Neuling
erfahrener Neuling Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Mo 21.03.16 14:54 
Zitat:
wie kann man ganz leicht eine StackOverflowException erreichen?
Indem man eine Funktion schreibt die sich (unendlich oft) wieder selbst aufruft. Irgendwann ist der Stack dann voll und es kommt besagte Fehlermeldung.


Na klar, wie konnt ich das nur übersehen. Ja das ist natürlich blöd gelaufen :) Aber danke für den Tipp, werd ich mal nach gucken
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 21.03.16 14:57 
Die gesuchte Property der TexBox ist PasswordChar. Oder besser UseSystemPasswordChar dann bekommst du das systemabhängige passende Zeichen(unter aktuellen Windows Version also einen fetten Punkt und keinen Stern).