Рейтинг:
23
BillWoodruff
Есть гораздо более простой способ сделать это:
public const string HexLetters = "0123456789abcdefABCDEF\b"; // \b is the BackSpace character
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (! HexLetters.Contains(e.KeyChar)) e.Handled = true;
}
Обработчик событий нажатия клавиш запускается после события KeyDown и дает нам простой способ получить символ нажатой клавиши.
Если текущий символ не входит в набор символов, которые мы хотим разрешить, то установка e.Handled = true; в KeyPress EventHandler остановит "передачу" текущего символа другим возможным подписчикам.
Рейтинг:
0
CHANDRA SEKHARA GUPTA
private void TextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (IsHexadecimal(Strings.Chr(e.KeyValue)) == false && e.KeyCode != Keys.Back) {
e.Handled = true;
e.SuppressKeyPress = true;
}
}
public bool IsHexadecimal(string strInput)
{
System.Text.RegularExpressions.Regex myRegex = new System.Text.RegularExpressions.Regex("^[a-fA-F0-9]+$");
//boolean variable to hold the status
bool isValid = false;
if (string.IsNullOrEmpty(strInput)) {
isValid = false;
} else {
isValid = myRegex.IsMatch(strInput);
}
//return the results
return isValid;
}
private void TextBox1_TextChanged(object sender, System.EventArgs e)
{
if (IsHexadecimal(TextBox1.Text) == false && string.IsNullOrWhiteSpace(TextBox1.Text) == false) {
TextBox1.Clear();
MessageBox.Show("Invalid Content");
}
}
charmyvora
Системы.Текст.RegularExpressions.Регулярное выражение myRegex = новая система.Текст.RegularExpressions.Для regex("^[а-ФА-и F0-9]+$");
string text = textBox1. Text;
bool isHex = myRegex.Выполняется(текст);
если (! isHex)
{
текстовое поле textbox1.Текст = текст.Подстрока(0, текст.Длина - 1);
текстовое поле textbox1.Объект selectionstart = текстовое поле textbox1.Текст.Длина;
}
Member 12659926
частная TextBox1_KeyDown недействительным(объект отправителя, система.Окна.Формы.KeyEventArgs e)
{
if (IsHexadecimal (Strings.ЧР(электронная.Значения)) == ложь &&усилителя; электронные.Данные keyCode != Ключи.Обратно) {
е.Обработано = истина;
e. Suppressskeypress = true;
}
}
В этих строках.Chr отображается как ошибка. я использую visual studio 2012.
Member 12659926
если я удаляю текст в текстовом поле, он дает исключение, говоря, что длина не может быть равна нулю,что для этого нужно сделать
W∴ Balboos, GHB
Одна модификация, которую я бы сделал в приведенной выше логике решения: просто всегда замените содержимое текстового поля обработанной регулярным выражением строкой - нет необходимости проверять, действительно ли он что-то сделал с исходной строкой - гораздо более простая логика и на 100% такая же эффективная.
charmyvora
Это простая логика, просто есть, если на изменение текста и пропустить всю логику, когда пустой.
Member 12659926
если я это сделаю, то текстовое поле будет принимать все алфавиты.
Member 12659926
Я поместил код в textbox1_textchanged() это правильно
charmyvora
Да... Вот идеальный код для вас. Это также позволит избежать вашего исключения
частный недействительными textBox1_TextChanged(объект отправителя, EventArgs в электронной)
{
Системы.Текст.RegularExpressions.Регулярное выражение myRegex = новая система.Текст.RegularExpressions.Для regex("^[а-ФА-и F0-9]+$");
string text = textBox1. Text;
bool isHex = myRegex.Выполняется(текст);
if (! isHex & & amp; text.Длина > 0)
{
текстовое поле textbox1.Текст = текст.Подстрока(0, текст.Длина - 1);
текстовое поле textbox1.Объект selectionstart = текстовое поле textbox1.Текст.Длина;
}
}
charmyvora
Не делайте на клавише вниз. см. выше комментарий
charmyvora
Я опубликовал его как отдельное решение. Пожалуйста, прокомментируйте там
Member 12659926
спасибо за ответ, теперь текстовое поле принимает от А до Я,Мне нужно только до f
Member 12659926
спасибо за ответ, теперь текстовое поле принимает от А до Я,Мне нужно только до f
charmyvora
z!! я не думаю, что мой код делает это. пожалуйста, проверьте еще раз.
charmyvora
У тебя неправильное выражение лица. Пожалуйста, скопируйте и вставьте мой код в Решение ниже
Member 12659926
извините, я сделал небольшую ошибку,она работает нормально, большое вам спасибо
charmyvora
Спасибо. Пожалуйста, оцените мое решение, когда вы его увидите