Вы можете подписаться на событие Control.Leave
, которое будет запущено, когда управление теряет фокус. Первоначально я думал, что использование Control.LostFocus
будет самым подходящим событием для использования, но оно не доступно через конструктора, поскольку вам нужно будет вручную подписаться на мероприятие, которое, на мой взгляд, немного уродливое и нетрадиционное.
private void inputTextBox_Leave(object sender, EventArgs e)
{
if (inputTextBox.Text != string.Empty)
{
string input = inputTextBox.Text;
inputTextBox.Text = input.First().ToString(CultureInfo.InvariantCulture).ToUpper() +
string.Join(string.Empty, input.Skip(1));
}
}
Вы походите вы заинтересованы в Control.Validating
. Преимущество использования Control.Validating
заключается в том, что вы можете использовать обработчик событий, заданный аргументом; CancelEventArgs
и установите для свойства Cancel
значение true. То, что это будет делать, это остановить управление от потери фокуса и заставить пользователя ввести действительное значение. Я не думаю, что это подходит для вашего приложения, поскольку вы на самом деле не проверяете ничего, кроме форматирования ввода.
private void inputTextBox_Validating(object sender, CancelEventArgs e)
{
if (inputTextBox.Text == string.Empty)
{
statusLabel.Text = "The given input is not valid.";
e.Cancel = true;
}
}
Голые в виду, что, когда форма закрывается, все элементы управления к югу последовательно теряют фокус и Control.Validating
событие обжигали, который может остановить закрытие формы, пока все поля не проходят их относительные проверки достоверности. Если вам нужно избегать такого поведения, победит быстрый поиск.
Лучше вы можете пойти с пользовательским контролем .......... – andy
Прочтите это: [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.leave.aspx), он может содержать ответ на ваш вопрос. – Nolonar