Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод только чисел 
:(
    Опции темы
inkognitum
Дата 28.7.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.8.2006
Где: г. Набережные Чел ны

Репутация: 1
Всего: 1



Добрый день.

Не подскажите как в поле ввода (textBox) разрешить ввобдить только числа, сложность в том что числа не обязательно целые, например (10,07)


Заранее спасибо.
--------------------
"Убить всех людей!" (с) Bender
PM MAIL ICQ Skype   Вверх
Partizan
Дата 28.7.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 8
Всего: 67



inkognitum, отлавливать textchanged и делать там Decimal.TryParse();


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Alekz
Дата 28.7.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 5.2.2008
Где: Запорожье, Украин а

Репутация: 1
Всего: 2



Можно использовать MaskedTextBox
PM MAIL   Вверх
Bishop
Дата 28.7.2008, 11:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 3
Всего: 16



inkognitum, 
Код
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Regex.IsMatch(e.KeyChar.ToString(), @"[-\b\d.,]"))  // backspace, цифры, минус, точка и запятая
    {
        if (Regex.IsMatch(e.KeyChar.ToString(), "[.,]")) // заменим на системный разделитель целой и дробной части
            e.KeyChar = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
    }
    else
        e.Handled = true;
}

PM WWW ICQ   Вверх
inkognitum
  Дата 29.7.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 11.8.2006
Где: г. Набережные Чел ны

Репутация: 1
Всего: 1



Всем спасибо!
--------------------
"Убить всех людей!" (с) Bender
PM MAIL ICQ Skype   Вверх
jonie
Дата 30.7.2008, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Bishop можно навводить кучу запятых )


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Bishop
Дата 30.7.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 3.6.2005
Где: Минск, Беларусь

Репутация: 3
Всего: 16



jonie, так и задумано. И минусов тоже можно много ввести, и не только в начале числа. Так на самом деле удобней, когда нужно ошибку исправить, запятую например не в той позиции: вначале ставим где надо, потом удаляем где не надо. А ещё там Ctrl+C/Ctrl+V не работают. А мышкой можно вставить что угодно. И вот это плохо.
А лучше не блокировать ввод вообще. Использовать ErrorProvider для индикации ошибок, а окончательную проверку правильности проводить отдельно, перед обработкой. Хотя я бы всё равно делал замену точек и запятых на системный разделитель в KeyPress.
Код
private void textBox1_TextChanged(object sender, EventArgs e)
{
    char ds = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
    errorProvider1.SetError((sender as TextBox), Regex.IsMatch((sender as TextBox).Text, @"^[+-]?\d*(\d"+ds+@")?\d*$") ? "" : "Можно вводить только числа");
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Regex.IsMatch(e.KeyChar.ToString(), "[.,]"))
        e.KeyChar = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
}
private void button1_Click(object sender, EventArgs e)
{
    double res;
    if (double.TryParse(textBox1.Text, out res))
        MessageBox.Show(res.ToString());
}

PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.