Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93

KillFocus в CEdit

15.03.2016, 19:44. Показов 1758. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Подскажите, пожалуйста, а то голову уже сломал себе!
Есть простой диалог в котором находятся два CEdit control: m_edit1 и m_edit2.
Необходимо создать проверку того, что вводим в эти эдиты при потери фокуса каждого из них. Для этих двух эдитов созданы при помощи КлассВизарда отклики на сообщение WM_KILLFOCUS. Получилось следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void CEditDlg::OnKillfocusEdit1() 
{
    if(m_edit1.GetDlgItemInt(IDC_EDIT1)>8 || m_edit1.GetDlgItemInt(IDC_EDIT1)==0) 
        {MessageBox("error edit1");
    m_edit1.SetFocus();
    m_edit1.SetSel(0, -1);}
}
 
void CEditDlg::OnKillfocusEdit2() 
{
    if(m_edit2.GetDlgItemInt(IDC_EDIT2)>8 || m_edit2.GetDlgItemInt(IDC_EDIT2)==0) 
        {MessageBox("error edit2");
    m_edit2.SetFocus();
    m_edit2.SetSel(0, -1);}
}
После запуска программы я устанавливаю фокус на EDIT1, после того, как я ввел в нем неправильные значения я мышкой щелкаю на edit2, вначале выскакивает МессиджБокс с "error edit2", затем после закрытия этого сообщения сразу же выскакивает Мессидж - "error edit1"! Иными словами срабатывают сразу два Килла, что очень бесит! Что я только не предпринимал! ВОПРОС: как сделать так, чтобы после потери фокуса в edit1 сначала вылетало соответственно сообщение "error edit1" и только оно одно и наоборот при потере фокуса edit2???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2016, 19:44
Ответы с готовыми решениями:

cedit
Подскажите плиз. в какую сторону смотреть что бы из cedit строку '44 22 33' занести в числовой массив.

CEdit не очищается
Всем доброго времени суток. Проблема такова: когда я хочу изменить текст в многострочном IDC_EDIT, то прежний текст в нем не удаляется, а...

Не переносятся строки в CEdit
Программа на MFC. На диалоге разместил Edit Control. Создал переменную для этого контрола. Затем посредством вызова метода SetWindowTextW...

2
21 / 21 / 13
Регистрация: 08.12.2015
Сообщений: 71
16.03.2016, 16:06
Валеронище, как вариант завести переменную, в которой будем отслеживать какой эдит последний правили short s_ed=0; , значение 1 будет для первого, 2 - для второго.
Добавить обработчики на события ::OnEnChangeEdit()
C++
1
2
3
4
5
6
7
8
void CEditDlg::OnEnChangeEdit1()
{
 s_ed=1;
}
void CEditDlg::OnEnChangeEdit2()
{
 s_ed=2;
}
И поправить условия для отображения Message Box-ов :
C++
1
if((m_edit1.GetDlgItemInt(IDC_EDIT1)>8 || m_edit1.GetDlgItemInt(IDC_EDIT1)==0)&&(s_ed==1))
C++
1
if((m_edit2.GetDlgItemInt(IDC_EDIT2)>8 || m_edit2.GetDlgItemInt(IDC_EDIT2)==0)&&(s_ed==2))
P.S. Можно наверное и попроще что-нибудь придумать
0
0 / 0 / 2
Регистрация: 04.07.2014
Сообщений: 93
16.03.2016, 19:53  [ТС]
Спасибо! Конечно вариант, но достаточно громоздкий! У меня этих эдитов 12 штук, для каждого Килл и еще Чейндж! Я вот что понял, но не понял почему, упростил свой вариант, чтобы докопаться до сути, но пока никак! Вот как стало:
C++
1
2
3
4
5
6
7
8
9
void CEditDlg::OnKillfocusEdit1() 
{
        MessageBox("error edit1");
}
 
void CEditDlg::OnKillfocusEdit2() 
{
       MessageBox("error edit2");
}
Так и вот, когда я установил фокус на edit1, потом мышкой клацаю на edit2, и оставляю курсор в этом поле, при этом выскакивает сообщение "error edit2" вначале, после его закрытия выскакивает "error edit1". Я не пойму откуда "error edit2", если поле эдит2 не теряло фокус, а потеряло его поле эдит1????????? В чем прикол?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2016, 19:53
Помогаю со студенческими работами здесь

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

Фильтр ввода CEdit
Доброе время суток! Пишу на Visio Studio 2003 в MFC на C. На форме есть CEdit. Как сделать фильтр вводимых символов (Например :...

Програмно создать CEdit
Есть дочернее окно, в него пытаюсь всунуть CEdit -> безрезультатно. class CMyFrameWnd:public CFrameWnd { public: ...

Как поменять CComboBox на CEdit ?
Доброго времени суток! Задача: В окно диалога с помощью стандартных методов Visual C++ 6.0 был помещён комбинированный список...

MFC CEdit & unicode
имеем диалоговое юникодовое MFC приложение. в диалоге имеем CEdit m_Edit; вводим в окошко кирилличный текст, который нормально...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru