3 / 3 / 1
Регистрация: 15.02.2011
Сообщений: 8
1

Создание текстового поля для цифровых значений

26.03.2013, 01:44. Показов 1708. Ответов 2
Метки нет (Все метки)

Visual C#. Проект для Smart device (Windows CE)
Нужно создать пользовательский элемент управления, производный от TextBox, так что он будет принимать только числовой ввод. Взял пример отсюда: http://msdn.microsoft.com/ru-r... -snippet-1. Зашибись. Дальше надо сделать, чтобы после ввода первой цифры автоматически добавлялась десятичная точка. Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
protected override void OnKeyPress(KeyPressEventArgs e)
{
    if (Char.IsDigit(e.KeyChar))
     {   // Digits are OK
          if (this.Text.Length == 0)
             { 
                this.Text += decimalSeparator;                
              }
 
       }
}
Точка добавляется, но курсор остается перед ней. Теперь надо передвинуть курсор в конец, чтобы вводить следующие цифры, например, так:
C#
1
2
this.SelectionStart = 2;
this.SelectionLength = 0;
И тут начинается лажа. Десятичная точка перемещается на первую позицию, а цифра становится после нее. Как это побороть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2013, 01:44
Ответы с готовыми решениями:

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

Использование TextBox-ов для ввода цифровых значений
Добрый день! Начитался разной информации и уже каша в голове. Итак задача. Необходимо при...

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

Создание текстового поля
как создать текстовое поле? если честно я уже даже и не знаю где искать материал нигде не могу...

2
1146 / 948 / 242
Регистрация: 15.06.2012
Сообщений: 3,686
Записей в блоге: 1
26.03.2013, 08:16 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {   // Digits are OK
                base.OnKeyPress(e);
                if (this.Text.Length == 0)
                {
                    this.Text = e.KeyChar + ",";
                    this.SelectionStart = 2;
                    this.SelectionLength = 0;
                    e.Handled = true;
                }
            }
            else
                e.Handled = true;
            
        }
Добавлено через 1 минуту
И да - понятия не имею, как это работает. Если кто объяснит - буду рад.

Добавлено через 7 минут
Озарение, как всегда, приходит уже после того, когда написал... >_< У нас наша нажатая клавиша добавляется уже после обработки в OnKeyPress

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {   // Digits are OK
                base.OnKeyPress(e);
                if (this.Text.Length == 0) //как бы намекает, что в контейнере ничего нет
                {
                    this.Text += ","; // в пустой (!) контейнер записываем точку
                    this.SelectionStart = 2; // выставляем позицию в конец +1. (!!!)
                    this.SelectionLength = 0; //можно даже не трогать
                }
            }
            else
                e.Handled = true;
            
        }
// после, не зависимо от нас, срабатывает вот это
//this.Text += KeyChar;
// то есть к нашей точке в конец (!) прибавляется нажатая клавиша
1
3 / 3 / 1
Регистрация: 15.02.2011
Сообщений: 8
26.03.2013, 14:03  [ТС] 3
Спасибо, все получилось. Я, кстати, так тоже пробовал, но без этой строчки :
C#
1
e.Handled = true;
которая, как я понял, не дает событию KeyPress передавать аргумент другим функциям, а без нее вводимая цифра добавляется в конец строчки еще раз (тогда же допер, что нажатая клавиша добавляется уже после обработки в OnKeyPress ). И это:
C#
1
2
else
   e.Handled = true;
убрал, с ним после запятой не добавляются следующие цифры
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2013, 14:03
Помогаю со студенческими работами здесь

Среднее арифметическое значений строк текстового поля textBox
Подскажите пожалуйста, как вычислить среднее арифметическое значений, которые построчно введены в...

Вывод из одного текстового поля 2х значений разными полями
Добрый день. Возник вопрос. В таблице t1 есть поле &quot;Наим_операции&quot;, где записано такое -...

Создание текстового поля с закругленными краями
Все примет как сделать с помощью css текстовое поле input=&quot;text&quot; вот такую примерно

Создание текстового рабочего поля как в delphi
Доброго времени суток и хорошего настроения всем:) Нужен ваш совет! Моя программа предназначена...

Маска ввода для текстового поля
Ребят помогите, мне нужно, чтобы в текстовое поле при вводе значения даты, к примеру: 01.01.2012...

SQL запрос для текстового поля
Query1.Close ; Query1.SQL.Clear ; Query1.SQL.Add('SELECT Индекс, Фамилия FROM Студент WHERE...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru