Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21

Калькулятор. Ввод символов в textbox

27.04.2014, 16:52. Показов 6892. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Нужна помощь, почему-то не работает. Пишу калькулятор. Есть TextBox - "TextMain". Нужно сделать запрет на ввод всех символов кроме цифр, запятой и операций. Запускаю - вводятся все символы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private: System::Void textMain_KeyPress(Object^ sender, KeyPressEventArgs^ e) {
             if ((e->KeyChar >= '0') && (e->KeyChar >= '0'))
             {
                 return;
             }
             if (e->KeyChar == '.')
             {
                 e->KeyChar = ',';
             }
             if (e->KeyChar == ',')
             {
                 if (textMain->Text->IndexOf(',') != -1)
                     e->Handled = true;
                 return;
             }
 
             e->Handled = true;
}
В чем проблема? Может я что-то в начале забыл дописать? Прошу помочь. Заранее спасибо.

Добавлено через 26 минут
Windows Forms, Visual Studio 2013
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.04.2014, 16:52
Ответы с готовыми решениями:

Ограничение на ввод символов в TextBox
Нужно ограничить ввод текста в TextBox так чтобы можно было вводить только числа (от 0 до 9), буквы русского алфавита и символ...

Ввод определенных символов в textbox
Добрый вечер,имеется textbox.И 3 массива символов. Как сделать чтобы при одной работе(флаг какой-нибудь),вводились только символы из 1-го...

Ограничить ввод символов в TextBox
Я хочу сделать ограничение ввода в текстовое поле (т.е только цифры и определенные знаки). В WinForms у компонента есть событие KeyPress,...

23
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 16:55
Цитата Сообщение от Andrew Tobilko Посмотреть сообщение
C++
1
if ((e->KeyChar >= '0') && (e->KeyChar >= '0'))
Вот тут может так надо:
C++
1
 if ((e->KeyChar >= '0') && (e->KeyChar <= '9'))
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 18:08  [ТС]
аналогично, вводиться все!
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 18:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private: System::Void textMain_KeyPress(Object^ sender, KeyPressEventArgs^ e) {
             if ((e->KeyChar >= '0') && (e->KeyChar >= '0'))
             {
                 return;
             }
             if (e->KeyChar == '.')
             {
                 e->KeyChar = ',';
             }
             if (e->KeyChar == ',')
             {
                 if (textMain->Text->IndexOf(',') != -1)
                     e->Handled = true;
                 return;
             }
else {
e-> KeyChar='\0';
}
 
             e->Handled = true;
}
Может так?
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 18:32  [ТС]
все то же самое
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 19:37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) {
    
                 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;
                 }
                if (e->KeyChar == (char)Keys::Back) return;
                  e->Handled = true;
                
             }
Вот так у меня не вводится ничего, кроме возврата каретки, цифр и запятой
1
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 19:53  [ТС]
C++
1
this->textMain->TextChanged += gcnew System::EventHandler(this, &Calculator::textMain_TextChanged);
а что подключать в описании? я просто еще не совсем разобрался
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 20:02
У меня так работает, в мастере создал приложение, написал обработчик события keypress. У меня VisualStudio 2010
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 20:17  [ТС]
а что у тебя написано в описании textBox?
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 20:26
C++
1
this->textMain->TextChanged += gcnew System::EventHandler(this, &Calculator::textMain_TextChanged);
Это по моему описание обработчика события изменения текста и к проблеме отношения не имеет.
А тебе надо поменять TextBox на TextMain вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private: System::Void textMain_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) {
    
                 if ((e->KeyChar >= '0') && (e->KeyChar <= '9'))
                 {
                     return;
                 }
                 if (e->KeyChar == '.')
                 {
                     e->KeyChar = ',';
                 }
                 if (e->KeyChar == ',')
                 {
                     if (textMain->Text->IndexOf(',') != -1)
                         e->Handled = true;
                     return;
                 }
                if (e->KeyChar == (char)Keys::Back) return;
                  e->Handled = true;
                
             }
Ведь у тебя объект TextBox, который у меня называется TextBox1, называется textMain
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 20:32  [ТС]
C++
1
this->textMain->KeyPress += gcnew System::EventHandler(this, &Calculator::textMain_KeyPress);
так тоже не работает...
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 20:45
Я думаю, что надо вернуть всё на первоначальное, когда вводилось всё и в обработчик события KeyPress вставить
это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if ((e->KeyChar >= '0') && (e->KeyChar >= '0'))
             {
                 return;
             }
             if (e->KeyChar == '.')
             {
                 e->KeyChar = ',';
             }
             if (e->KeyChar == ',')
             {
                 if (textMain->Text->IndexOf(',') != -1)
                     e->Handled = true;
                 return;
             }
 
             e->Handled = true;
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
27.04.2014, 21:35  [ТС]
киньте пожалуйста мне свои файлы, полностью
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
27.04.2014, 21:48
Лучший ответ Сообщение было отмечено Andrew Tobilko как решение

Решение

во вложении
Вложения
Тип файла: rar dsvserdg.rar (668.2 Кб, 59 просмотров)
1
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
28.04.2014, 16:09  [ТС]
огромное спасибо, как и ожидалось все проблема была в описании
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
28.04.2014, 16:28
А где именно?
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
28.04.2014, 17:22  [ТС]
вот так правильно

C++
1
this->textMain->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &Calculator::textMain_KeyPress);
есть еще несколько вопросов по калькулятору, если не сложно помоги...
как сделать проверку на кому ( в С# разобрался, тут не пойму). Если есть кома - ничего не добавляем, если нет - пишем.

C++
1
2
3
4
5
6
private: System::Void pictureVirgule_Click_1(System::Object^  sender, System::EventArgs^  e) {
                if (textMain->Text == "0")
                    textMain->Text = "0,";
                else
                    textMain->Text += ",";
    }
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
28.04.2014, 18:09
Что-то я не понял, что нужно сделать? Что такое кома?)
0
0 / 0 / 0
Регистрация: 13.09.2013
Сообщений: 21
28.04.2014, 19:14  [ТС]
кома (укр) - запятая
0
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
28.04.2014, 22:00
А знаки и скобки тоже в TextBox добавляются?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2014, 22:00
Помогаю со студенческими работами здесь

Ограничить ввод символов в textbox
Подскажите как сделать, чтобы в текст бокс вводились только шесть цифр от 0 до 9, в таком формате 12:12:45, то есть чтобы символы...

Запретить ввод повторяющихся символов в textbox
Друзья, палундра! В форме текстбокс, в который вводится текст, и кнопка &quot;готово&quot; для перехода к следформе, ну эт не особо...

Ввод только английских символов в textBox
Как можно реализовать систему, чтоб в мой текст бокс, куда пользователь должен будет вводить пароль, нельзя было писать русские буквы?...

Ограничение на ввод в textbox двух символов
Добрый вечер. Делаю калькулятор(новичок), возник вопрос ограничения вводимых символов в Textbox c клавиатуры. Необходимо, чтобы вводились...

Ввод в TextBox только определенных символов
Здравствуйте, как сделать чтоб поле textbox понимало только , а остальные символы - нет? Т.е в поле писать можно только латинскими...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru