Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 4 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 26.03.2009
Всем привет!
Пишу курсач на С#

Нужно добавить в текстбокс ограничение ввода, что бы вводились только цифры и знак ",", а знак "." автоматически менялся на ",". Так же есть условие что если поле пустое то воодится "0,". При этом должен работать бекспейс и другие системные кнопки.

Вот что получилось
Код:
private void X1_1_KeyPress(object sender, KeyPressEventArgs e)
        {
            {
                if ((e.KeyChar >= '0') && (e.KeyChar <= '9')) return;
                if (e.KeyChar >= '.') e.KeyChar = ',';
                if (e.KeyChar == ',')
                {
                    if (X1_1.Text.IndexOf(',') != -1)
                        e.Handled = true;
                    if (X1_1.Text.Length == 0)
                    {
                        e.Handled = true;
                        X1_1.Text = "0,";
                    }
                    return;
                }
                if (e.KeyChar == '-')
                {
                    if (X1_1.Text.IndexOf('-') != -1)
                        e.Handled = true;
                    return;
                }
            }
        }


Но проблема в том, что программа реагирует на нажатия остальных символов, при этом вводит "," или "0," в зависимости от наполнения текстбокса (так если бы я нажимал "."). Подскажите пожалуйста, в чем может быть проблема?
Еще интересует как можно сделать что бы после автозамены на "0," курсор ввода перемещался в конец, после запятой.



Партнер
 

Member
Статус: Не в сети
Регистрация: 21.01.2010
Откуда: ... и куда ...
Навскидку сразу ошибка:
Код:
if (e.KeyChar == '.') e.KeyChar = ',';

В if должно быть ==

Добавлено спустя 2 минуты 16 секунд:
А по поводу переноса курсора после 0, - смотреть у TextBox свойство SelectionStart и SelectionLength

_________________
Если на узкой лесной тропе вам повстречался медведь, не теряйтесь, сразу бейте его по морде обгаженными трусами.


 

Member
Статус: Не в сети
Регистрация: 26.03.2009
Цитата:
Добавлено спустя 2 минуты 16 секунд:
А по поводу переноса курсора после 0, - смотреть у TextBox свойство SelectionStart и SelectionLength


Вот это погляжу, спасибо!

Добавлено спустя 15 минут 10 секунд:
Вот так все работает:
Код:
        private void X1_1_KeyPress(object sender, KeyPressEventArgs e)
        {
            {
                if ((e.KeyChar >= '0') && (e.KeyChar <= '9')) return;
                if (e.KeyChar == '.') e.KeyChar = ',';
                if (e.KeyChar == ',')
                {
                    if (X1_1.Text.IndexOf(',') != -1)
                        e.Handled = true;
                    if (X1_1.Text.Length == 0)
                    {
                        e.Handled = true;
                        X1_1.Text = "0,";
                        X1_1.SelectionStart = X1_1.Text.Length;
                    }
                    return;
                }
                if (e.KeyChar == '-')
                {
                    if (X1_1.Text.IndexOf('-') != -1)
                        e.Handled = true;
                    return;
                }
                if (e.KeyChar == 8) return;
                e.Handled = true;
            }
        }


Добавлено спустя 39 минут 14 секунд:
Где X1_1 наш textbox, если не понятно. У меня программа с мат. уклоном, по этому переменная X1_1.


 

Member
Статус: Не в сети
Регистрация: 21.01.2010
Откуда: ... и куда ...
По-хорошему, отнаследуйте класс от TextBox-а, и в нем уже пропишите внутренние обработки. Иначе вешать на каждый такой компонент обработчик в основной форме - не есть хорошо. А так - свой новый компонент просто кидаете на форму и он уже работает, без привязок лишних.

_________________
Если на узкой лесной тропе вам повстречался медведь, не теряйтесь, сразу бейте его по морде обгаженными трусами.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 4 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan