У меня есть следующие функции:Использование события KeyDown правильно
private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
TextBox TextBox = (TextBox)sender;
if (TextBox.Text == "Name" ||
TextBox.Text == "E-mail address" ||
TextBox.Text == "Confirm e-mail" ||
TextBox.Text == "Mobile number" ||
TextBox.Text == "Password")
{
TextBox.Foreground = new SolidColorBrush(Colors.Black);
TextBox.Text = e.Key.ToString().ToLower();
TextBox.Select(1, 0);
}
}
Мои TextBoxes изначально имеют набор меток, как их собственность .text. Когда пользователь нажимает на TextBox, я хочу, чтобы курсор переместился в начало, а затем, когда они начинают печатать, метка исчезает.
Это работает правильно, но проблема в том, когда я нажимаю ноль, TextBox заполняется «D0». Он также неправильно обрабатывает корпус, поэтому я добавил вызов ToLower. Я просто хочу, чтобы TextBox очистился, а затем отобразил точно, что пользователь постучал, с правильным случаем. Другие примеры того, как он работает неправильно, это то, что он отобразит «пробел», если я коснусь пробела.
Любые идеи?
Спасибо, но я не могу этого сделать, потому что, когда TextBox получает фокус, я все еще хочу отображать метку. Поэтому текстовое поле Name будет по-прежнему содержать имя, пока оно не начнет печатать, и тогда мне нужно его очистить. Почему такая плохая практика? Это меня не смущает, и это означает, что мои переменные все еще капитализируются. – xceed
Это плохая практика, потому что у вас потенциально может быть много текстовых полей, которые смутили бы вас. Несколько стандартная практика, которую я использую для текстовых полей, - добавить «tb» в начало любого текстового поля. Например, tbName, tbEmail, tbPhone и т. Д. Таким образом, нет места для путаницы, вы знаете, какой тип контроля он и какой общий тип данных содержится в нем. –
@xceed Итак, я добавил редактирование, которое должно соответствовать вашим потребностям. TextBox - это тип класса, и его следует использовать в качестве него, иначе вы увидите, что в нем может возникнуть множество ошибок в вашем коде. Обратите внимание, что класс может иметь статический метод/переменную, к которой вы будете обращаться к MyClass.Variable - для этого вам не нужен объект. – Romasz