Entwickler-Ecke

WinForms - Text zu einer TextBox hinzufügen verursacht StackOverflow


erfahrener Neuling - Mo 21.03.16 14:34
Titel: Text zu einer TextBox hinzufügen verursacht StackOverflow
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:

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 - 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


erfahrener Neuling - 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 - 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).