Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/121: Рейтинг темы: голосов - 121, средняя оценка - 4.59
2 / 2 / 3
Регистрация: 15.11.2014
Сообщений: 188

Ввод в TextBox только чисел

15.11.2014, 13:58. Показов 25992. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наверняка эта тема есть, к сожалению не нашел.
В поле TextBox1 нужно водить с клавы "вещественные числа", попытался сделать сам не получается.(Делал в VB.NET 2013)
VB.NET
1
2
3
4
5
6
7
8
 Dim qq As Integer
        qq = TextBox1.Text
        Select Case CInt(qq)
            Case qq = "0" To "9", "-", ","
                TextBox1.Text = CInt(qq)
                'Case Else
                '    TextBox1.Text = ""
        End Select
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2014, 13:58
Ответы с готовыми решениями:

Ввод в TextBox только цифр
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Добрый день! Мне нужно, что бы...

Ввод только текста в TextBox
Здравствуйте. Есть способ разрешить ввод только ЦИФР в текстбокс If Not Char.IsDigit(e.KeyChar) Then e.Handled = True Как...

Ввод в TextBox только определенных символов
Суть проблемы такова: что нужно прописать в окно TextBox, чтобы в поле можно было ввести только числа , знак -, и чтобы, если в поле...

40
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
20.11.2014, 10:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от desant Посмотреть сообщение
Я думаю оптимальный вариант это звук при не правильных наборах
Тоже нехорошо-много пользователей без звука работают(((
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
20.11.2014, 10:46
Цитата Сообщение от Serg34 Посмотреть сообщение
Представьте себе пользователя, который в миллионный раз пытается ввести точку, чтобы разделить целое от дробного, у него ничего не получается и программа ничего ему не говорит.
Но хотя бы и не стирает то, что он ввёл. Не знаю, как у других пользователей, но лично я в случае чего перебераю точка или запятая и максимум со второго раза всё получается. И вообще, вопрос про правильный разделитель вроде как не должен возникать, поскольку как только свойство DecimalPlaces будет больше нуля, NumericUpDown будет показывать число с дробной частью и нужным разделителем.

Цитата Сообщение от Serg34 Посмотреть сообщение
можно и интегер или еще что-дь, у меня и со строкой работает без косяков
Integer как раз вряд ли. Переполнение же можно млоить, если там Double.

Цитата Сообщение от Serg34 Посмотреть сообщение
А это вы уже придираетесь, или это как-то влияет на работу программы????
Это влияет на удобочитаемость кода. Не знаю, как другим, но мне так читать жутко неудобно.

Цитата Сообщение от Serg34 Посмотреть сообщение
как убрать стрелки на NumericUpDown
Ни разу не возникало такой необходимости.
В крайнем случае, можно сделать его наследника и пошаманить с CreateParams и отрисовкой.
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
20.11.2014, 12:52
Цитата Сообщение от Serg34 Посмотреть сообщение
не нашел (может мало искал) как убрать стрелки на NumericUpDown
VB.NET
1
2
3
        NumericUpDown1.Controls(0).Visible = False
        'или
        NumericUpDown1.Controls.RemoveAt(0)
Но после свертывания-восстановления на NumericUpDown появляется черная полоса.
0
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
20.11.2014, 13:03
Цитата Сообщение от Qwertiy Посмотреть сообщение
Не знаю, как у других пользователей, но лично я в случае чего перебераю точка или запятая и максимум со второго раза всё получается.
Иногда даже толковый пользователь не понимает то, что нужно ввести число (в поле "Вес, кг" вводят слова "Дерево" и т.п.), поэтому на перебор я лично не рассчитываю и думаю нужно при неправильном вводе подсказывать пользователю как нужно заносить исходные данные.
Ввиду всего вышесказанного, думаю, идеальным будет создать элемент, при наборе текста
при выходе из которого будет проверяться значение и выдаваться/не выдаваться сообщение об ошибке (типа как на рисунке).
Но, пока я такого не умею
Миниатюры
Ввод в TextBox только чисел  
0
120 / 112 / 16
Регистрация: 30.10.2014
Сообщений: 326
20.11.2014, 13:23
Кажется на форуме такого ещё небыло
VB.NET
1
2
3
4
5
6
7
8
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        Dim dd As Double 'тут нужный тип для проверки
        Try
            dd = TextBox1.Text & e.KeyChar
        Catch ex As Exception
            e.Handled = True
        End Try
End Sub
(в поле "Вес, кг" вводят слова "Дерево" и т.п.)
Для этого просто делал свой контрол для отображения и ввода чисел.
При клике по текстбоксу появляется экранная клавиатура с цифрами и ввод значения только с неё. Клава как бы "намекает", чего хотят от пользователя.
Стандартное решение для SCADA.
0
 Аватар для vova2112
148 / 136 / 34
Регистрация: 28.02.2014
Сообщений: 165
20.11.2014, 13:31
По скольку тема для некоторых актуальна, то есть ещё такой код:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
        Dim c As Char = e.KeyChar, Ds As Char = Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
        Dim Sstart% = sender.SelectionStart, Slen% = sender.SelectionLength, Tlen% = sender.Text.Length , Nd% = 3
        Dim tex$ = sender.Text, ShCu$ = vbBack & ChrW(1) & ChrW(22) & ChrW(24) & ChrW(26) & ChrW(3) & "."c & ","c & "-"c
 
        If Char.IsDigit(c) OrElse ShCu.Contains(c) Then
            If c = "-"c Then
                e.KeyChar = If(tex.Contains("-"), Nothing, "-")
                e.KeyChar = If(Sstart <> 0, Nothing, e.KeyChar)
            End If
            If ",.".Contains(c) Then
                e.KeyChar = If(tex.Contains(Ds), Nothing, Ds)
                e.KeyChar = If(Sstart = 0 AndAlso ",.".Contains(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart < (Tlen - 2), Nothing, e.KeyChar)
                e.KeyChar = If(Tlen >= 1 AndAlso Sstart = 1 AndAlso tex(0) = "-"c, Nothing, e.KeyChar)
            End If
            If tex.Contains(Ds) AndAlso Tlen = (tex.IndexOf(Ds) + Nd) Then
                e.KeyChar = If(Slen = 0 AndAlso Sstart > (Tlen - Nd) AndAlso Not ShCu.Contains(c), Nothing, e.KeyChar)
            End If
            If Tlen > 1 AndAlso tex(0) = "-"c Then
                e.KeyChar = If(Sstart = 0 AndAlso Char.IsDigit(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart = 1 AndAlso Not Char.IsDigit(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart = 1 AndAlso "0".Contains(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart = 1 AndAlso tex(1) = "0" AndAlso "0".Contains(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart = 2 AndAlso tex(1) = "0" AndAlso Char.IsDigit(c) AndAlso Slen = 0, Nothing, e.KeyChar)
            End If
            If Tlen >= 1 Then
                e.KeyChar = If(Sstart = 0 AndAlso tex(0) = "0"c AndAlso "0".Contains(c), Nothing, e.KeyChar)
                e.KeyChar = If(Tlen > 1 AndAlso Sstart = 0 AndAlso "0".Contains(c), Nothing, e.KeyChar)
                e.KeyChar = If(Sstart = 1 AndAlso tex(0) = "0"c AndAlso Char.IsDigit(c) AndAlso Slen = 0, Nothing, e.KeyChar)
            End If
            If ChrW(22).ToString.Contains(c) Then 'Запрет на вставку текста из буфера
                    e.Handled = True
                    Beep()
            End If
        Else
            e.Handled = True
            Beep()
            'MessageBox.Show("Пожалуйста, вводите только цифры.", "Ошибка ввода")
        End If
    End Sub
+ для запрета контекстного меню:
VB.NET
1
2
3
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.ContextMenuStrip = New ContextMenuStrip
    End Sub
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
20.11.2014, 13:43
Цитата Сообщение от Олег_ Посмотреть сообщение
Кажется на форуме такого ещё небыло
Бррр.. Есть метод TryParse, зачем вместо него использовать конструкцию Try - Catch?
И ещё, Ctrl+V тебе

Цитата Сообщение от vova2112 Посмотреть сообщение
По скольку тема для некоторых актуальна, то есть ещё такой код:
Что-то хитрое, лень разбираться.
Но Ctrl+V тоже вроде позволит что угодно вставить.

Цитата Сообщение от vova2112 Посмотреть сообщение
+ для запрета контекстного меню:
Эм.. Тогда из него ещё и копировать будет нельзя. Отвратный способ.

Добавлено через 1 минуту
Хм.. Или KeyPress всё-таки срабатывает со служебными сочетаниями?
0
 Аватар для vova2112
148 / 136 / 34
Регистрация: 28.02.2014
Сообщений: 165
20.11.2014, 13:49
Qwertiy,
Меню отключил, но можно и своё написать(не так сложно создать всего 5 пунктов), да и без него горячие клавиши работают кроме Ctrl+V(отключил обработку сочитания), т.к. для вставки ещё примерно такое же кол-во кода писать придётся для проверки всех условий, а это -просто лень.
0
120 / 112 / 16
Регистрация: 30.10.2014
Сообщений: 326
20.11.2014, 14:43
Кажется на форуме такого ещё небыло
Да забыл блин, смайлик прикрутить. Вставлять за забывчивость не феншуйно.
с TryParse больше буквов получится.
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
20.11.2014, 15:10
Цитата Сообщение от Олег_ Посмотреть сообщение
с TryParse больше буквов получится.

VB.NET
1
2
Dim Temp As Double
e.Handled = Not Double.TryParse(TextBox1.Text & e.KeyChar, Temp)
Добавлено через 3 минуты
Цитата Сообщение от vova2112 Посмотреть сообщение
да и без него горячие клавиши работают кроме Ctrl+V(отключил обработку сочитания)
И Shift+Insert тоже работает
0
120 / 112 / 16
Регистрация: 30.10.2014
Сообщений: 326
20.11.2014, 15:31
Но идею с простой проверкой TextBox1.Text & e.KeyChar ведь подхватил...
На сколько просто оказалось проверка на запятую (разделитель) с учётом региональных настроек.
хоть способ с Try - Catch противоречит всем учебникам, право на жизнь имеет.
-----------
а буков то почти столькоже....
но текст
VB.NET
1
2
Catch ex As Exception
End Try
студия автоматом вставляет, и мои пальчики меньше трудиться будут.
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
20.11.2014, 16:38
НаписАл такой вариант (вроде, все пожелания учёл):
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Option Strict On
 
Imports System.Text.RegularExpressions
 
Public Class Form1
 
    Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        Dim separator As Char = CChar(System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator(0))
 
        If Char.IsControl(e.KeyChar) Then
            If (Asc(e.KeyChar) = 22 And Clipboard.ContainsText) Then
                e.Handled = Not (IsNumeric(Clipboard.GetText) And Not (Regex.IsMatch(TextBox1.Text, separator) And Regex.IsMatch(Clipboard.GetText, separator)))
            End If
 
        Else
            e.Handled = Not (Char.IsDigit(e.KeyChar) Or (Equals(e.KeyChar, separator) And Not (Regex.IsMatch(TextBox1.Text, separator))))
 
        End If
    End Sub
End Class
- Ввод только цифр.
- Ввод десятичного разделителя, используемого на конкретном компьютере.
- Десятичный разделитель может быть введен только один раз.
- Управляющие коды обрабатываются.
- При нажатии Ctrl+V проверяется, что находится в буфере. Если в буфере текст, то проверяется может ли быть текст числом и не получится ли при вставке нескольких десятичных разделителей. Т.е. если в пустой TextBox вставить, например, 12,3 (разделитель в данном случае - ",") один раз получиться, то повторно вставить уже не получиться.

Недостаток - не обрабатывается Shift+Insert. Его код не определяется через Asc(e.KeyChar). Как отловить Shift+Insert?
0
 Аватар для jugger_off
13 / 13 / 3
Регистрация: 21.12.2013
Сообщений: 225
21.01.2015, 14:18
Люди!!! В начале темы есть мой код предлагающий как можно осуществить ввод в текст бокс только чисел. Так вот из-за этого у меня не получается ни скопировать ни вставить текст в поля где я прописал это код. Причём модифицирующие клавиши работают, т.е. я могу принажатой Shift выделить текст с помощью стрелочек, а также при нажатой ctrl я также с помощью стрелочек вправо-влево могу быстро переходить к началу или концу строки. Но копирование ctrl+c и вставка ctrl+v не работают. Пробовал создать глобальную переменную flag as Boolean и в событии KeyDown придавать ей значение True вот так:
VB.NET
1
If e.Control = True then flag = True
а по событии KeyUp возвращать значение в False аналогичным способом, затем в событии KeyPress я прописал:
VB.NET
1
2
3
4
5
If flag = True Then 
   If e.KeyChar = "c" Then
   e.Handled =  False
   End If
End If
Но ничего не получилось.
0
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
21.01.2015, 17:10
Весь топик не читал. Может кому пригодится.

С помощью данного кода ввод чего-либо, кроме цифр - невозможен.
VB.NET
1
2
3
  Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not Char.IsDigit(e.KeyChar) Then e.Handled = True
    End Sub
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
21.01.2015, 18:57
jugger_off, смотрите мое сообщение 32 в данной теме.

Цитата Сообщение от Дядя Корней Посмотреть сообщение
If Not Char.IsDigit(e.KeyChar) Then e.Handled = True
Короче:
VB.NET
1
e.Handled = Not (Char.IsDigit(e.KeyChar))
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
21.01.2015, 22:46
Цитата Сообщение от Дядя Корней Посмотреть сообщение
С помощью данного кода ввод чего-либо, кроме цифр - невозможен.
Ну буфер же... Жуть.

Цитата Сообщение от Petr_S Посмотреть сообщение
Короче
Ага, но скобки-то лишние.
0
 Аватар для Petr_S
213 / 230 / 87
Регистрация: 21.04.2013
Сообщений: 404
22.01.2015, 02:08
Цитата Сообщение от Qwertiy Посмотреть сообщение
скобки-то лишние
Знаю Скобки помогают чтению кода. Здесь, конечно, короткое выражение, но при длинном удобно.
0
22.01.2015, 10:08

Не по теме:

Цитата Сообщение от Petr_S Посмотреть сообщение
Скобки помогают чтению кода. Здесь, конечно, короткое выражение, но при длинном удобно.
На мой взгляд, наоборот: чем меньше скобок - тем проще читать...

0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
22.01.2015, 23:53
Почему нельзя использовать MaskedTextBox?
0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
23.01.2015, 00:28
Замабувараев, потому что надо использовать NumericUpDown...

Добавлено через 28 секунд
А вообще, что-то мы тут по кругу ходить начали...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2015, 00:28

Ввод только цифр и точки в TextBox
Здравствуйте. Имеется TextBox куда нужно вводить информацию, но нужно сделать так что бы можно вводить было только цифры (0-9) и...

Ввод в textBox только цифр и запятой
Использую такой код: Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)...

Как ограничить ввод в TextBox только нулем и единицей
Мне необходимо,чтобы в TextBox можно было вводить только числа 1 и 0. Заранее благодарен

Ввод только чисел в TextBox
Почему-то не работает обработка события для TextBox. Ввод только чисел. Подозреваю, что событие сначала нужно описать с помощью ключевого...

Ввод только чисел в TextBox
Видел кучу тем на форуме, где люди задают один и тот же вопрос снова и снова. &quot;Как сделать доступным ввод только цифр и что бы можно было...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru