Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
1

Одна запятая в текстбоксе

29.06.2011, 19:26. Просмотров 4277. Ответов 26
Метки нет (Все метки)


На форме несколько текстбоксов, в них пишу тока числа, и необходимо чтобы была только одна запятая в поле. Для одного тексбокса вот код:

C#
1
2
3
4
5
6
7
8
if (e.KeyChar == ',')
            {
                if (textBox1.Text.IndexOf(',') != -1)
                {
                    e.Handled = true;
                }
                return;
            }
А как его применить сразу для нескольких, чтоб не писать одно и тоже по тыщу раз?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2011, 19:26
Ответы с готовыми решениями:

одна запятая в Edit
Здравствуйте! Подскажите что нужно написать в процедуре чтобы пользователь мог ввести символ ','...

Одна запятая в textBox
Добрый день! Есть textBox с возможностью ввода только цифр и запятых. private void...

TextBox только одна запятая не в начале числа
Возможно кому то будет смешно, ноя уже второй день не могу сделать защиту от дурака. Имеется...

Известно что среди символов строки S есть по крайней мере одна запятая
Известно что среди символов строки S есть по крайней мере одна запятая . Найти такое натуральное i...

26
183 / 186 / 17
Регистрация: 26.11.2010
Сообщений: 511
29.06.2011, 19:29 2
for'ом пробегаться по текстбоксам
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 19:32  [ТС] 3
Я нифига нечего не понимаю еще, чето пытаюсь вот сделать, можете по подробнее рассказать. Как вот числа только вводить во всех текстбоксах мне подсказали, а вот как еще и одну запятую, я не могу сообразить

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            this.textBox1.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
            this.textBox2.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
            this.textBox3.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
        }
        private void textBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar == '.' || e.KeyChar == ','))
            {
                e.KeyChar = ',';
            }
            else if (!(Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)))
            {
                e.Handled = true;
            }
0
175 / 176 / 54
Регистрация: 01.06.2011
Сообщений: 507
29.06.2011, 20:29 4
juserka, сделай подсчёт запятых в текст боксе.
C#
1
2
3
4
5
int z = 0;
if ((e.KeyChar == '.' || e.KeyChar == ','))
    z ++;
if (z == 1)
    e.Handled = false;
Но это бред, т.к. будет сложно узнать, а не стёр ли запятую пользователь. Поэтому лучше for'ом пробежаться
C#
1
2
3
4
5
6
7
char[] c = (TextBox)sender.Name.Text.ToCharArray();
int z = 0;
for (int i = 0; i < c.Length; i++)
    if (c[i] == ',')
        z++;
if (z >= 1)
    e.Handled = false; // Это я так понял запрещает нажатие такого символа
0
183 / 186 / 17
Регистрация: 26.11.2010
Сообщений: 511
29.06.2011, 20:47 5
Проще конвертировать с try-catch
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 20:48  [ТС] 6
Он у меня почему то на Name ругается
0
175 / 176 / 54
Регистрация: 01.06.2011
Сообщений: 507
29.06.2011, 20:53 7
juserka, я ошибся, там .ToString() вместо .Name
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 20:56  [ТС] 8
Цитата Сообщение от ushim Посмотреть сообщение
juserka, я ошибся, там .ToString() вместо .Name
А теперь на Text
Блин, я ваще эту запесь логически не понимаю
0
175 / 176 / 54
Регистрация: 01.06.2011
Сообщений: 507
29.06.2011, 21:54 9
лучше тогда:
C#
1
2
TextBox tb = (TextBox)sender;
            char[] c = tb.Text.ToCharArray();
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 21:57  [ТС] 10
Эх, все чисто, но код не сработал, запятых сколько угодно писать можно и в любом текстбоксе.
0
6020 / 3427 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.06.2011, 22:24 11
juserka, если это нужно для ввода дробных чисел, то почему бы не использовать numericUpDown? Либо использовать конвертацию в тип double при вводе текста
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 22:29  [ТС] 12
У меня для одного текстбокса есть уже код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 if ((e.KeyChar >= '0') && (e.KeyChar <= '9'))
            {
                return;
            }
 
            if (e.KeyChar == '.')
            {
                e.KeyChar = ',';
            }
 
            if (e.KeyChar == ',')
            {
                if (textBox1.Text.IndexOf(',') != -1)
                {
                    e.Handled = true;
                }
                return;
                }
                 e.Handled = true;
            }
Он отлично работает как и должно, разрешает вводить только цифры и 1 запятую. А у меня на форме несколько текстбоксов, и это правило надо применить на все их, а я незнаю как это сделать. Вот и обратился к вам за помощью. Потому что копировать данный кусок N кол-во раз, это не правильно я считаю.
0
6020 / 3427 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.06.2011, 22:33 13
Цитата Сообщение от juserka Посмотреть сообщение
Потому что копировать данный кусок N кол-во раз, это не правильно я считаю
Тебе уже показывали, как подписать контролы на одно событие. У тебя это указано в 3-м посте
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 22:42  [ТС] 14
Цитата Сообщение от nio Посмотреть сообщение
Тебе уже показывали, как подписать контролы на одно событие. У тебя это указано в 3-м посте
Все правильно, поля я связал, но не работает проверка на запятую. С которой и мучиюсь до сих пор. При моем коде, стоит ввести запятую в 1 текстбокс, в другие уже ни одной не поставишь.

Добавлено через 3 минуты
Ребят, вы же профессионалы. Вопрос то простой: надо чтобы в любой текст бокс на форме, был разрешен ввод только цифр и 1 запятая (ну или проще, дробное число)
вот, как одни числа чтоб вводились, это уже реалезовано, а с запятой еще нет.
0
6020 / 3427 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.06.2011, 22:51 15
держи
C#
1
2
3
4
5
6
7
8
9
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string s=((TextBox)sender).Text;
            try
            {
                double.Parse(s);
            }
            catch (FormatException) { ((TextBox)sender).Text = s.Remove(s.Length - 1); }
        }
1
56 / 54 / 10
Регистрация: 27.07.2010
Сообщений: 279
29.06.2011, 22:53 16
Создай приблизительно такое событие
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void inputOnlyDoubleNum(object sender, KeyPressEventArgs e)
{
    TextBox textbox = sender as TextBox;
 
    if (e.KeyChar == ',')
        if (textbox.Text.Contains(',') ||
            textbox.Text == String.Empty)
            {
                e.Handled = true;
                return;
            }
            
            else
            {
                e.Handled = false;
                return;
            }
 
    if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))
    {
        e.Handled = true;
    }
}
и подпиши события текстбоксов KeyPress на него
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 22:56  [ТС] 17
nio, не получилось. Вводится запятых сколько угодно (в любой текстбокс), потом выскакивает ошибка и все зависает. (там знаечние StartIndex меньше 0 стает)
0
6020 / 3427 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.06.2011, 23:00 18
покажи мое как событие вешаешь?
0
0 / 1 / 1
Регистрация: 28.06.2011
Сообщений: 65
29.06.2011, 23:05  [ТС] 19
_Vladimir_, не, ваще код сразу все красными линиями на подчеркивал, немогу понять что не нравится ему, весьде пишит, чего то нет, или тип не правильный

Добавлено через 3 минуты
nio, может да, неправильно че вставляю, вообщем, вот весь код

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
namespace Расход_топлива
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            this.textBox1.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
            this.textBox2.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
            this.textBox3.KeyPress += new KeyPressEventHandler(this.textBox_KeyPress);
        }
        private void textBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar == '.' || e.KeyChar == ','))
            {
                e.KeyChar = ',';
            }
            else if (!(Char.IsDigit(e.KeyChar) || Char.IsControl(e.KeyChar)))
            {
                e.Handled = true;
            }
            string s = ((TextBox)sender).Text;
            try
            {
                double.Parse(s);
            }
            catch (FormatException) { ((TextBox)sender).Text = s.Remove(s.Length - 1); }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //расчет
        }
    }
}
0
56 / 54 / 10
Регистрация: 27.07.2010
Сообщений: 279
29.06.2011, 23:06 20
Цитата Сообщение от nio Посмотреть сообщение
покажи мое как событие вешаешь?
во рабочий код
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
using System;
using System.Linq;
using System.Windows.Forms;
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.textBox1.KeyPress += new KeyPressEventHandler(this.inputOnlyDoubleNum);
            this.textBox2.KeyPress += new KeyPressEventHandler(this.inputOnlyDoubleNum);
        }
 
        private void inputOnlyDoubleNum(object sender, KeyPressEventArgs e)
        {
            TextBox textbox = sender as TextBox;
            if (e.KeyChar == ',')
                if (textbox.Text.Contains(',') ||
                    textbox.Text == String.Empty)
                {
                    e.Handled = true;
                    return;
                }
                else
                {
                    e.Handled = false;
                    return;
                }
 
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))
            {
                e.Handled = true;
            }
        }
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2011, 23:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вывести сообщение что число в текстбоксе один меньше числа в текстбоксе
Вывести сообщение о том что число в текстбоксе один меньше числа в текстбоксе

Даны символы S1,...,Sn, среди которых есть хотя бы одна запятая. Определить номер S(i) по условию
Даны натуральное число n, символы S1,...,Sn. Известно, что среди S1,...,Sn есть хотя бы одна...

Дано некоторый текст, в котором есть хотя бы одна запятая. Определить порядковый номер первой запятой в тексте
Дано некоторый текст, в котором есть хотя бы одна запятая. Определить порядковый номер первой...

Дано некоторый текст, в котором есть хотя бы одна запятая. Определить порядковый номер последней запятой в тексте
Дано некоторый текст, в котором есть хотя бы одна запятая. Определить порядковый номер последней...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.