Я работаю над простым приложением WinForms для государственной школы, где пользователи могут идентифицировать себя, введя либо свои сетевые идентификаторы (которые являются не защищенной информацией), либо их системные идентификаторы (которые являются защищенная информация). Я хочу переключиться на символ пароля, когда программа обнаруживает системный идентификатор (который работает просто отлично); однако, когда я делаю это, мое приложение также запускает событие Leave текстового поля, которое говорит пользователям, что нужно исправить проблему с данными для входа в систему ... еще до того, как возникнет проблема.
Вот мой код:
void login_TextChanged(object sender, EventArgs e)
{
login.UseSystemPasswordChar = login.Text.StartsWith(<prefix-goes-here>);
}
private void login_Leave(object sender, EventArgs e)
{
if (login.Text.StartsWith(<prefix-goes-here>) && login.Text.Length != 9)
{
signInError.SetError(login, "Your System ID must be nine digits.");
login.BackColor = Color.LightPink;
}
else if (login.Text.IsNullOrWhiteSpace())
{
signInError.SetError(login, "Please enter your username or System ID.");
login.BackColor = Color.LightPink;
}
else
{
signInError.SetError(login, string.Empty);
login.BackColor = Color.White;
}
}
В конечном счете, я не знаю, что это вызовет массу проблем, и я мог бы переместить этот шаг проверки в событие Click кнопки входа в моей форме, но я бы предпочел по возможности проводите проверку по частям.