Ich habe eine einfache Anwendung, die jeden eingegebenen Text in einem anderen Textfeld umkehrt. Der Catch ist, Sie können beide Textfelder ändern und die Änderungen werden (wörtlich) in den anderen reflektiert.Warum verursacht das nicht eine unendliche Schleife von Ereignissen?
Ich habe diesen Code geschrieben, weil ich glaube, dass er Probleme verursacht.
private void realText_TextChanged(object sender, EventArgs e)
{
mirrorText.Text = mirror(realText.Text);
}
private void mirrorText_TextChanged(object sender, EventArgs e)
{
realText.Text = mirror(mirrorText.Text);
}
private string mirror(string text)
{
return new string(text.Reverse().ToArray()).Replace("\n\r", "\r\n");
}
Ich versuchte es dann aus, zu glauben, dass es eine unendliche Schleife verursachen würde (realText
ändert mirrorText
, geschieht ein weiteres Ereignis, mirrorText
realText
ändert, etc). Außer dem beabsichtigten Verhalten ist jedoch nichts passiert.
Ich bin natürlich glücklich darüber, ich könnte es hier lassen. Oder könnte ich?
Ich bin ziemlich sicher, dass das Ereignis TextChanged
ausgelöst werden soll, wenn geändert wird. Ist das beabsichtigte Verhalten eines Fehlerschutzes bei den Ereignissen, oder hatte ich nur Glück? Kann sich dieser Code auf einem anderen Computer mit anderen Buildeinstellungen usw. als falsch verhalten?
private void realText_TextChanged(object sender, EventArgs e)
{
if (realText.Focused)
{
mirrorText.Text = Mirror(realText.Text);
}
}
Ich werde wahrscheinlich tun es trotzdem sicher zu sein, aber ist es erforderlich überprüfen dies: Es kann leicht behoben? (Ich werde nicht einmal fragen, ob es empfohlen wird.)
Ich bin ziemlich sicher TextChanged Ereignis wird nur ausgelöst, wenn der Text von der Benutzeroberfläche nicht von Code geändert wird. – Magnus
@Magnus von MSDN: Dieses Ereignis wird ausgelöst, wenn die Text-Eigenschaft entweder durch eine programmatische Änderung oder Benutzerinteraktion geändert wird. – Marton
@Magnus, du könntest Reflector benutzen (ich glaube, dass es hieß, richtig? Oder die JetBrains eins ... uh ... kann mich nicht an den Namen erinnern), um nachzusehen und zu sehen! –