Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Dragon

TextBox только для чисел

30.11.2009, 10:57. Показов 2454. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посоветуйте как сделать что бы TextBox позволял вводить только числа.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2009, 10:57
Ответы с готовыми решениями:

Ввод в TextBox только чисел
Здравствуйте. Помогите реализовать ввод в textBox только чисел.

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

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

19
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 79
30.11.2009, 13:43
Наследовать от обычного TextBox'а и переопределять реакцию на TextChanged (или KeyUp)
0
Dragon
30.11.2009, 14:03
>Наследовать от обычного TextBox'а и переопределять реакцию на TextChanged (или KeyUp)

А как проверить что введено именно число, например такое
'-123.254'
а такое
'2343,221' ?
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 79
30.11.2009, 14:19
Вроде была функция IsNumeric, но не уверен.
0
Dragon
30.11.2009, 14:45
Public Function IsNumeric(ByVal Expression As Object) As Boolean
есть только VB.NET в c# ее нет
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 79
30.11.2009, 15:02
Ну конкретно про c# я не могу сказать. Попробуй регулярные выражения или отлавливай нажатия клавиш - если нажата не цифра и не служебная клавиша, то каким-либо образом игнорируй.
0
Dragon
30.11.2009, 15:07
сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void txtValue_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                // пробуем преобразовать строку в число
                ((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString();
                ((TextBox)sender).ForeColor = SystemColors.ControlText;
            }
            catch
            {
                // если не получилось, отменяем выход их TextBox
                ((TextBox)sender).ForeColor = Color.Red;
                e.Cancel = true;
            }
        }
Oleg
07.12.2009, 12:14
Не понял в чем проблемма?
Обрабатываешь нажатие каждой клавиши и проверяешь на цифры и знаки + - . ,
Все остальное отсекаешь
Vsh
07.12.2009, 13:05
есть еще и такие числа

-45e-6
Oleg
07.12.2009, 13:09
Ну так вставь проверку на е
1 / 1 / 1
Регистрация: 24.09.2009
Сообщений: 33
09.12.2009, 11:25
Можно создать текстовую строку в которой перечислить все встречайщие символы, например:
string str='1234567890e_-'
а после проверять каждый раз.
0
Dragon
09.12.2009, 11:34
Все должно быть проще...
0 / 0 / 0
Регистрация: 13.12.2009
Сообщений: 4
16.12.2009, 18:02
я Вышел таким способом:

Dim MyVar As Object
Dim MyCheck As Boolean
MyVar = '53'
MyCheck = IsNumeric(MyVar)

числа типа 324234Е+25 работали на ура покрайней мере у меня
0
Dragon
17.12.2009, 11:00
Ну нету на c# IsNumeric

В принципе я уже решил данную проблемму, даже двумя способами.
Если кому интересно могу выложить коды моих TextBoxDecimal и TextBoxX.
1 / 1 / 1
Регистрация: 24.09.2009
Сообщений: 33
17.12.2009, 11:06
Если не трудно то давай
0
Dragon
17.12.2009, 11:30
Вариант номер раз (используется decimal.Parse):
C#
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
42
43
44
45
46
47
48
49
50
51
    /// <summary>
    /// TextBox для работы с числами
    /// Автор: Головченко Роман
    /// </summary>
    public class TextBoxDecimal : System.Windows.Forms.TextBox
    {
        public TextBoxDecimal() : base()
        {
            this.TextAlign = HorizontalAlignment.Right;
            this.Validating += new System.ComponentModel.CancelEventHandler(Text_Validating);
        }
        private void Text_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                // пробуем преобразовать строку в число
                ((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString();
                ((TextBox)sender).ForeColor = SystemColors.ControlText;
            }
            catch
            {
                // пробуем заменить '.' на ','
                this.Text = TryValidText(((TextBox)sender).Text);
                // если не получилось, отменяем выход их TextBox
                ((TextBox)sender).ForeColor = Color.Red;
                e.Cancel = true;
            }
            if (e.Cancel)
                try
                {
                    // пробуем еще раз преобразовать строку в число
                    ((TextBox)sender).Text = decimal.Parse(((TextBox)sender).Text).ToString();
                    ((TextBox)sender).ForeColor = SystemColors.ControlText;
                    e.Cancel = false;
                }
                catch
                {
                    // если не получилось опять, отменяем выход их TextBox
                    ((TextBox)sender).ForeColor = Color.Red;
                    e.Cancel = true;
                }
                
        }
        /// <summary>пробуем заменить '.' на ','</summary>
        /// <param name='s'>Исходная строка</param>
        private string TryValidText(string s )
        {
            s = s.Replace('.', ',');
            return s;
        }
    }
Dragon
17.12.2009, 11:33
Вариант номер два (делал не я, но работает )
[code]
public enum TextBoxPrecision
{
_0_Nil = 0,
_1_One = 1,
_2_Two = 2,
_3_Three = 3,
_4_Four = 4,
_5_Five = 5,
}

/// <summary>
/// Описание элемента TextBox для числовых данных
/// </summary>
public class xTextBox : System.Windows.Forms.TextBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
private TextBoxPrecision txtPrecision = TextBoxPrecision._2_Two;
/// <summary>
/// Значение поля TextBox.Text в числовом формате
/// </summary>
public decimal Value;
/// <summary>
/// Точность вещественного числа
/// </summary>
public TextBoxPrecision Precision
{
get
{
return this.txtPrecision;
}
set
{
this.txtPrecision = value;
}
}

public xTextBox()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
// TODO: Add any initialization after the InitForm call
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
}
base.Dispose( disposing );
}

#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// xTextBox
//
this.Font = new System.Drawing.Font('Microsoft Sans Serif', 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World, ((System.Byte)(204)));
this.Size = new System.Drawing.Size(100, 23);
this.TextAlign = System.Windows.Forms.HorizontalAlignment .Right;
this.LostFocus += new System.EventHandler(this.xTextBox_LostFo cus);

}
#endregion

private void xTextBox_LostFocus(object sender, EventArgs e)
{
int l = this.Text.ToString().Length;
string s = '';
string s1 = this.Text.ToString();
if (s1[l-1] == ',')
{
for (int i=0; i < l-1; i++)
{
s = s+s1[i];
}
this.Text = s;
}
}
/// <summary>
/// Приведение строки к числовому формату
/// </summary>
/// <param name='txtInput'>Приводимая строка строка</param>
/// <returns></returns>
public string StrToDecimal(string txtInput)
{
int Len = txtInput.Length;
bool IsFirst = true;
string txtReturn = '';
int Frac = 1;

for (int i = 0; i < Len; i++)
{
if (char.IsNumber(txtInput[i]) == false & IsFirst == true & this.txtPrecision != TextBoxPrecision._0_Nil)
{
if (i==0)
{
txtReturn = '0,';
}
else
{
txtReturn = txtReturn+',';
}
IsFirst = false;
}
else if (char.IsNumber(txtInput[i]) == false & this.txtPrecision == TextBoxPrecision._0_Nil)
{
txtReturn = txtReturn;
}
else if (char.IsNumber(txtInput[i]) == false & IsFirst == false)
{
txtReturn = txtReturn;
}
else if (char.IsNumber(txtInput[i]) == true & IsFirst == true)
{
txtReturn = txtReturn + txtInput[i];
}
else if (char.IsNumber(txtInput[i]) == true & IsFirst == false & Frac <= (int)this.txtPr
Dragon
17.12.2009, 11:34
Желающие могут пользоваться, если не сложно сохраняя копирайт
alex1
18.12.2009, 23:45
А чё валидатор слабо к тестбоксу прикрутить? Там даже регэксп есть стандартный для проверки чисел
Dragon
20.12.2009, 11:40
А пример можно? Под Wondows.Form!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2009, 11:40
Помогаю со студенческими работами здесь

Ввод в textBox только нечётных чисел
Здравствуйте. Подскажите пожалуйста как реализовать ввод в textBox только нечётные числа. (Кроме 1, т.е 3, 5, 7, 9) Заранее спасибо. ...

Ввод только чисел double в TextBox
Привет! проблема у меня: в TextBox ввожу числа double. Мне нужно, чтобы ничего, кроме даблов, туда не вводилось, т. е. чтобы можно было...

Возможность копирования в textbox только чисел
Всем привет такая проблемка текстбокс цены настроен только на введение чисел но скопировать в него ctrl+c,v либо правой кнопкой мыши числа...

Чтение чисел через пробел из одного textbox'a и перевод чисел в другой textbox
При выводе в textbox4 цикл for, все n раз, переводит из двоичной последовательности в десятичную только первую последовательность единиц и...

Обработчик событий работает только для одного textBox
Добрый день, два текстбокса подключил к одному обработчику private void InputKey(...,...) в виндоусформ через дизайнер. Почему для первого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru