У меня есть простое приложение, которое отменяет любой текст, набранный для него в другом текстовом поле. Уловка, вы можете изменить либо текстовое поле, и изменения будут (буквально) отражены в другом.
Я написал этот код, полагая, что он вызывает проблемы.
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");
}
Затем я попробовал это, полагая, что это вызовет бесконечный цикл (realText
changes mirrorText
, произойдет другое событие, mirrorText
changes realText
и т.д.). Однако ничего, кроме предполагаемого поведения, не произошло.
Я, конечно, доволен этим, я мог бы просто оставить его здесь. Или я мог?
Я уверен, что событие TextChanged
должно быть запущено при каждом изменении Text
. Является ли это предполагаемым поведением некоторой защиты от ошибок в событиях, или мне просто повезло? Может ли этот код ошибочно работать на другом компьютере, с другими настройками сборки и т.д.? Его можно легко зафиксировать:
private void realText_TextChanged(object sender, EventArgs e)
{
if (realText.Focused)
{
mirrorText.Text = Mirror(realText.Text);
}
}
Я, вероятно, сделаю это в любом случае, чтобы быть в безопасности, но нужно ли это проверить это? (Я даже не собираюсь спрашивать, рекомендуется ли это.)