| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Удалить из текстбокс неправильно введныый символ |
| Автор: CityAC 5.11.2007, 12:24 | ||
| Поле для ввода телефонного номера. Если пользователь нажал кнопку, отличную от цифры и пробела, введенный символ нужно стереть. Думал получится имитацией кнопки backspace, но че то не выходит. Помогите плз.
|
| Автор: Baa 5.11.2007, 13:01 | ||
Может так? Твой вариант не учитывает ctrl+v ;-) т.е. я могу вставить любую гадость |
| Автор: 1stain 5.11.2007, 15:38 |
| а чем провинился стандартный MaskedTextBox ? |
| Автор: tea_723 5.11.2007, 17:22 |
| Чуть более развернуто чем Ваа написал. Это если номер в трех textbox вводить. В C# сам переведешь или помочь? Private Sub txtSelPage_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _Handles txtFax1.KeyPress, txtFax2.KeyPress, txtFax3.KeyPress 'This allows only numeric keypress. Dim tb As TextBox = sender Dim NChars As String = "1234567890,-()" & Chr(8) If NChars.IndexOf(e.KeyChar) = -1 Then ' Invalid Character e.Handled = True ElseIf e.Handled = False And tb.Text.Length = 0 Then tb.Text = e.KeyChar e.Handled = True tb.SelectionStart = 2 End If End Sub |
| Автор: CityAC 6.11.2007, 10:17 | ||
tea_723, Если можно то переведи, я в VB не силен |
| Автор: tol05 6.11.2007, 13:27 |
| а мне другое непонятно: зачем ждать когда пользователь нажмет клавишу, анализировать символ и потом его стирать, когда можно просто подцепиться на события нажатия клавиши и или пропускать символ в текстбокс, или нет. |
| Автор: Baa 6.11.2007, 14:23 | ||
А если я нажму правой кнопкой мыши и выберу вставить? |
| Автор: CityAC 6.11.2007, 15:25 | ||
ОК я за. Я подцеплялся, но не знаю как не пропустить символ Вставка ctrl+v для меня не критична. Если пользователь хочет поизвращаться таким методом - то это его проблемы Когда вводишь мобильные - все ОК, но когда городские - здесь путаница (коды могут быть 3-х,4-х, 5-ти значные) |
| Автор: tol05 6.11.2007, 15:32 | ||||
| ИМХО правильнее было бы заблокировать подобные действа... Я считаю нужно реализовать только
Да и юзеру так спокойнее будет. Например кинул я из буфера 34pwd~6. Какие символы выбрасывать будем? ИМХО - много возни возле одного только контрола, а он в программе не один наверняка. Если на каждый контрол писать по три страницы кода, как потом такой код сопровождать, апгрейдить? И потом, если допускать много вариантов, тогда и много валидаций нужно делать, ReGex добавлять и т.д. Нужно упростить. Но это сугубо моя точка зрения. P.S. не успел... Как не пропустить? Да в обработчике KeyPress (или KeyDown, какой лучше подойдет - смотри сам) проверять код клавиши и если не тот - делать e.Handled = true и выходить. перехватывать нужно окном - Form.KeyPreview Property или WndProc формы переопределить и т.д. Посмотри. на форуме много вариантов было вот набросал пример, пропускает только 0
|
| Автор: KLUBS 7.11.2007, 01:55 |
| Мне когда-то тоже нужел был такой textbox, я делал так: есть начальная длина текста в контроле, после изменений знаем положение каретки, путем мат. операций получаем строку введенную, или вставленную, ее то и начинаеем кромсать Потом нашел МаскТекстБокс, и успокоился) |
| Автор: Experimenter 7.11.2007, 19:39 |
| Дык еще у чаров (символов) свойства имеются IsDigit, IsWhitespace |
| Автор: CityAC 8.11.2007, 01:54 | ||||
Сделал так
И хотя tol05 писал:
Я переопределил KeyPress в TextBox и вроде работает. А вообще спасибо, tol05, столько было написано, а реально нужно было e.Handled = true; добавить к коду |