Member 12659926 Ответов: 3

Как сделать текстовое поле принимающим только шестнадцатеричные значения


привет,
у меня есть текстовое поле в форме, и я хочу, чтобы текстовое поле принимало только шестнадцатеричные значения,что означает значения от 0 до 9 и от a до f.
как это сделать.пожалуйста, помогите мне.

Что я уже пробовал:

я пробовал использовать [a-zA-Z] regularexpressions.он был не в состоянии

3 Ответов

Рейтинг:
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 остановит "передачу" текущего символа другим возможным подписчикам.


Рейтинг:
1

charmyvora

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            System.Text.RegularExpressions.Regex myRegex = new System.Text.RegularExpressions.Regex("^[a-fA-F0-9]+$");
            string text = textBox1.Text;
            bool isHex = myRegex.IsMatch(text);
            if (!isHex && text.Length > 0)
            {
                textBox1.Text = text.Substring(0, text.Length - 1);
                textBox1.SelectionStart = textBox1.Text.Length;
            }

}


Рейтинг:
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

Спасибо. Пожалуйста, оцените мое решение, когда вы его увидите