Member 10410972 Ответов: 2

Как разрешить внутри текстового поля в winforms C#


How to allow inside in textBox1 next items:
- allow only numbers (0-9)
- also allow next letters: M B G T
- also allow: the dot "." and comma ","


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

 private void textBox1_TextChanged(object sender, EventArgs e)
        {
//
        }

Richard MacCutchan

Просто добавьте свой код туда, где находится маркер комментария.

gggustafson

Я думаю, что вы захватываете, используя неправильное событие. От Microsoft "происходит при изменении значения свойства Text." Это не позволит вам тестировать отдельные символы по мере их ввода в текстовое поле. Я бы предложил вам рассмотреть событие KeyDown. Он предоставляет информацию о клавише, которая была нажата до отображения значения. Таким образом, вы можете проверить ключ и заблокировать его отображение. Надеюсь, это поможет.

2 Ответов

Рейтинг:
12

Maciej Los

Я бы посоветовал использовать validate событие с ErrorProvider и Regex.

Вот полный пример: Контроль.События Validating (Системы.Окна.Формы) | Microsoft Docs[^]

string[] somestrings = {"Ads20.e", "MG20.9", "BT3,5.0", "mt29.00", "32TG,5.99", "58BM5.11"};
string pattern = @"[[M|G|B|T|][0-9]|\.\,]|[[0-9][M|G|B|T|]|\.\,]";

foreach(string s in somestrings)
{
	Console.WriteLine("{0} => {1}", s, Regex.IsMatch(s, pattern));
}

Результат:
Ads20.e => False
MG20.9 => True
BT3,5.0 => True
mt29.00 => False
32TG,5.99 => True
58BM5.11 => True


Member 10410972

Мацей Лос большое вам спасибо. Проблема решена.

Maciej Los

Всегда пожалуйста.

Рейтинг:
0

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Просто написав подпись метода и ожидая, что мы "заполним ее", вы ничего не добьетесь.
Подсказка: я бы использовал регулярное выражение.


Member 10410972

Ладно, извини, забудь об этом ... Я сам с этим разберусь.

OriginalGriff

Отлично - так ты все равно узнаешь больше!

gggustafson

Мне не нравится твое отношение! Этот сайт должен помочь, а не смущать оперативников. Да, мы признаем, что вы хорошо осведомлены. Но нет абсолютно никаких причин причинять неудобства оператору. Простой ответ, как и мой, имеет большое значение для улучшения базы знаний OP.

Maciej Los

Не знаю, почему кто-то проголосовал против твоего ответа, пол...
Вверх-проголосовали!