Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 15.06.2014
Сообщений: 7
1

Подписаться на событие KeyPress для TextBox

15.06.2014, 13:39. Показов 6323. Ответов 7
Метки нет (Все метки)

есть несколько текстбоксов, в них можно вводить цифры, разделитеть и бэкспейс. Сам обработчик уменя есть (функция обработчик_KeyPress), но не могу подписать на него события KeyPress из TextBox-ов. И откуда создавать, из Form1_Load или textBox_KeyPress? Вот код:
...
...
...
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
39
40
41
42
43
44
45
46
47
48
this->ResumeLayout(false);
this->PerformLayout();
 
        }
#pragma endregion
        String^ ТчкИлиЗпт;
 
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) 
             {
                 this->Text = "Введите число";
                // Выясняем, что установлено на данном ПК в качестве разделителя целой и дробной частей: точка или запятая
                ТчкИлиЗпт = Globalization::NumberFormatInfo::CurrentInfo->NumberDecimalSeparator;
             }
 
    private: System::Void обработчик_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
    {
        bool ТчкИлиЗптНАЙДЕНА = false;
        // Разрешаю ввод десятичных цифр:
        if (Char::IsDigit(e->KeyChar) == true) return;
        // Разрешаю ввод <Backspace>:
        if (e->KeyChar == (char)Keys::Back) return;
        // Поиск ТчкИлиЗпт в textBox, если IndexOf() == -1, то не найдена:
        if (textBox1->Text->IndexOf(ТчкИлиЗпт) != -1)
        ТчкИлиЗптНАЙДЕНА = true;
        // Если ТчкИлиЗпт уже есть в textBox, то запрещаем вводить и ее,
        // и любые другие символы:
        if (ТчкИлиЗптНАЙДЕНА == true) { e->Handled = true; return; }
        // Если ТчкИлиЗпт еще нет в textBox, то разрешаем ее ввод:
        if (e->KeyChar.ToString() == ТчкИлиЗпт) return;
        // В других случаях - запрет на ввод:
        e->Handled = true;
    }
 
 
private: System::Void textBox1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
         {
 
         }
private: System::Void textBox2_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
         {
 
         }
private: System::Void textBox3_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
         {
 
         }
};
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2014, 13:39
Ответы с готовыми решениями:

событие KeyPress формы
помогите разобраться плз :) Имеется форма. необходимо создать обработку вводимых с клавиатуры...

Обработка события KeyPress компонентов TextBox
Здравствуйте. Есть фрагмент кода: if(Char::IsControl(e-&gt;KeyChar)) { ...

Как проверить что в textBox введен какой-то символ? Есть для этого какое-то событие?
Windows Forms. Пишу простой калькулятор. вот код Файлa Form.h #pragma once namespace Калькулятор...

Не работает событие KeyPress для TextBox
Подскажите пожалуйста!!!!Создаю textbox int Y = 50; lb4 =new Label(); ...

7
Администратор
Эксперт .NET
9161 / 4438 / 749
Регистрация: 17.04.2012
Сообщений: 9,226
Записей в блоге: 14
16.06.2014, 17:22 2
Обработчик KeyPress нужно присоединить в конструкторе формы
C++
1
textBox1->KeyPress += обработчик_KeyPress;
Можно вызвать этот обработчик в других обработчиках
C++
1
2
3
4
private: System::Void textBox1_KeyPress(System::Object^  sender, 
System::Windows::Forms::KeyPressEventArgs^  e)  {
    обработчик_KeyPress(sender, e);
}
0
1 / 1 / 0
Регистрация: 15.06.2014
Сообщений: 7
17.06.2014, 00:42  [ТС] 3
Вау, во втором варианте все получилось, СПАСИБО БОЛЬШОЕ. единственное, что если в одном из тексбоксе поставить разделитель(запятую), то в остальных поставить уже не получиться. щас попробую где-то обнулятор прикрутить.
А вот в первом случае выдает ошибку, собственно, это логично, я же нигде не указал где аргументы брать:
Ошибка 1 error C3867: ntyf01::Form1::обработчик_KeyPress: в вызове функции отсутствует список аргументов; используйте "&ntyf01::Form1::обработчик_KeyPress" для создания указателя на член c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 107 1 ntyf01

Добавлено через 2 часа 6 минут
а как в обработчике в этой строке :

C++
1
if (textBox1->Text->IndexOf(ТчкИлиЗпт) != -1)
менять textBox1 textBox2 textBox3 ???
0
Администратор
Эксперт .NET
9161 / 4438 / 749
Регистрация: 17.04.2012
Сообщений: 9,226
Записей в блоге: 14
17.06.2014, 08:31 4
Цитата Сообщение от duong Посмотреть сообщение
менять textBox1 textBox2 textBox3 ???
C++
1
2
TextBox tb = (TextBox)sender;
if (tb->Text->IndexOf(ТчкИлиЗпт) != -1) { // ...
это одно из предназначений параметра sender - возможность узнать, какой контрол вызвал событие.
0
1 / 1 / 0
Регистрация: 15.06.2014
Сообщений: 7
17.06.2014, 11:00  [ТС] 5
поменял, выдает сразу 5 ошибок.
Кликните здесь для просмотра всего текста
Ошибка 1 error C2440: приведение типов: невозможно преобразовать "System::Object ^" в "System::Windows::Forms::TextBox" c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 119 1 ntyf01
Ошибка 2 error C3673: System::Windows::Forms::TextBox: у класса нет конструктора копии c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 119 1 ntyf01
Ошибка 3 error C2819: тип "System::Windows::Forms::TextBox" не имеет перегруженный "operator ->" c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 120 1 ntyf01
Ошибка 4 error C2232: ->System::Windows::Forms::TextBox::Text: левый операнд имеет тип "class", используйте "." c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 120 1 ntyf01
Ошибка 5 error C2227: выражение слева от "->IndexOf" должно указывать на тип класса, структуры или объединения либо на универсальный тип c:\users\user\documents\visual studio 2010\projects\ntyf01\ntyf01\Form1.h 120 1 ntyf01
0
Администратор
Эксперт .NET
9161 / 4438 / 749
Регистрация: 17.04.2012
Сообщений: 9,226
Записей в блоге: 14
17.06.2014, 11:13 6
Опять, наваждение какое-то с этими стрелками
C++
1
2
TextBox^ tb = (TextBox^)sender;
if (tb->Text->IndexOf(ТчкИлиЗпт) != -1) { // ...
0
1 / 1 / 0
Регистрация: 15.06.2014
Сообщений: 7
17.06.2014, 12:17  [ТС] 7
да оно, работает. я вообще знаю что это указатель адреса в организованой памяти, но четко понять-осознать суть этих стрелок крышек пока не могу. А вообще какая книга самая толковая по C++ VS2010?
0
Администратор
Эксперт .NET
9161 / 4438 / 749
Регистрация: 17.04.2012
Сообщений: 9,226
Записей в блоге: 14
17.06.2014, 12:33 8
duong, не знаю, ни одной не прочитал
Несколько лет изучаю C#, освоил C++/CLI в сравнении, отличий немного.
Но для вас такой путь, я думаю, не лучший. Вот несколько, выбирайте
Microsoft Visual C++/CLI Step by Step by Julian Templeman
C++/CLI in Action by Nishant Sivakumar
Foundations of C++/CLI: The Visual C++ Language for .NET 3.5 by Gordon Hogenson
Возможно, какая-то из них переведена на русский.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2014, 12:33

Как обработать событие KeyPress каждого TextBox-а?
Имеются несколько TextBox с именами: Text(1), Text(2), Text(3) ... Text(n), Как обработать...

Событие KeyPress для текстбокса
Здравствуйте, не нашел этой проблемы на форуме. Вот есть у меня форма Form1, на ней текстбокс...

Событие keypress для формы не работает.
Есть форма windowsform на ней есть некоторые обьекты. Есть событие KeyPress и метод OnKeyDown() для...

Обработка KeyPress для нескольких TextBox
на форме имеется множество текстбоксов, я написал проверку на ввод только вещественных чисел,...


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

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

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