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

KillFocus в CEdit

15.03.2016, 19:44. Показов 1794. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru