Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
1

Связь Edit control и Spin Control

06.05.2020, 22:51. Показов 2119. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Имеется spin control и связанный с ним edit и множество прочих editов. Надо добиться того чтобы при разных значениях spina, значения у editов различались и впоследствии сохранить их в массив. Например полей эдитов 10, счетчик крутится 9 раз, значит всего 90 разных значений, которые надо записать в массив.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2020, 22:51
Ответы с готовыми решениями:

Нужна помощь с Source Control, Bug Control
Очень нужна помощь с таким вопросом: 1) надо организовать работу нескольких программеров с кодом ...

Изменение выравнивания в EDIT control
как налету изменить выравнивание текста в edit

Английский язык в Edit Control.
Вопрос может и простой,но никак не могу понять, как менять раскладку в Edit Text ? Создаю ниже...

Edit Control в модальном окне
Здравствуйте. Такая проблема: нужно в модальном окне в элементе edit control ввести текст и по...

18
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 10:40 2
Цитата Сообщение от yegor8 Посмотреть сообщение
Здравствуйте. Имеется spin control и связанный с ним edit и множество прочих editов. Надо добиться того чтобы при разных значениях spina, значения у editов различались и впоследствии сохранить их в массив. Например полей эдитов 10, счетчик крутится 9 раз, значит всего 90 разных значений, которые надо записать в массив.
Проблема-то в чём?
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 11:00  [ТС] 3
Я не понял как это реализовать. Как сделать чтобы при изменении spin менялись значения в edit?

Добавлено через 7 минут
Было бы например 90 editов тогда у каждого из них был бы свой ид и всё было бы ясно, а здесь я не знаю что делать.

Добавлено через 1 минуту
я пытался отслеживать местоположение спина с помощью pNMUpDown->iPos, но вышло неудачно.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 11:01 4
Цитата Сообщение от yegor8 Посмотреть сообщение
Я не понял как это реализовать. Как сделать чтобы при изменении spin менялись значения в edit?
Та надо, чтобы спин-контрол был следующим после edit-контрола, и у него были выставлены свойства Alignment и Auto Buddy
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 11:02  [ТС] 5
я это давно уже сделал
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 11:02 6
Цитата Сообщение от yegor8 Посмотреть сообщение
я пытался отслеживать местоположение спина с помощью pNMUpDown->iPos, но вышло неудачно.
Покажи код
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 11:08  [ТС] 7
один эдит связан с спином. и он увеличивается или уменьшается, но остальные эдиты 10 штук должны быть разными при разных значениях эдита связанного со спином
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 11:15 8
Цитата Сообщение от yegor8 Посмотреть сообщение
один эдит связан с спином. и он увеличивается или уменьшается, но остальные эдиты 10 штук должны быть разными при разных значениях эдита связанного со спином
Обрабатывай UDN_DELTAPOS и изменяй значение всех контролов, которые нужны

Добавлено через 1 минуту
Цитата Сообщение от yegor8 Посмотреть сообщение
я пытался отслеживать местоположение спина с помощью pNMUpDown->iPos, но вышло неудачно.
А что не получилось?
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 11:32  [ТС] 9
то есть вместо 90 эдитов я хочу использовать 10 эдитов и спин связанный с эдитом.

Добавлено через 6 минут
UDN_DELTAPOS об этой штуке я ничего не знал буду разбираться.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А что не получилось?
Я просто покажу код:
Это обработчик спина:
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
void CStudentEditDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    //spinner.SetRange(1, 9);
 
    //metr = pNMUpDown->iPos;
    //metr = 5;
    //for (int i = pNMUpDown->iPos; i<10; i++)
    if (pNMUpDown->iPos == 1)
    {
        m_strName = stt.Getf();
        m_strYear = stt.GetYear();
        stt.Setf(m_strName);
        stt.SetYear(m_strYear);
        //stt.SetOcenka(dlg.metr, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2);
        //stt.SetPredm(dlg.metr, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2);
        //CCursovayView::GetDocument()->m_list.PushBack(&st);
        /*name1 = ;
        oc1 = oc1;
        name2 = ;
        oc2 = ;
        name3 = ;
        oc3 = ;
        name9 = ;
        oc9 = ;*/
        UpdateData(FALSE);
    }
    // TODO: добавьте свой код обработчика уведомлений
    *pResult = 0;
}
А это код кнопки добавить студента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void CursuchView::OnAdd()
{
    CStudentEditDlg dlg;
    if (IDOK == dlg.DoModal())
    {
        Student st;
        dlg.CStudentEditDlg::stt = st;
        /*st.Setf(dlg.m_strName);
        st.SetYear(dlg.m_strYear);
        st.SetOcenka(dlg.metr,dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2, dlg.oc1, dlg.oc2);
        st.SetPredm(dlg.metr, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2, dlg.predm1, dlg.predm2);
        */
        //CString sY;
        //sY.Format(L"%d", dlg.CStudentEditDlg::metr);
        //AfxMessageBox(sY);
        GetDocument()->m_list.PushBack(&st);
        GetDocument()->SetModifiedFlag(TRUE);
 
        FillList();
    }
}
Добавлено через 9 минут
Я поясню.
В обработчике спиннера, я прекрасно и легко менял значения эдитов на нужные мне, но я должен был получить студента которого я выделил и отобразить его данные, а откуда мне взять студента?
Во view это делается так:
C++
1
2
CListCtrl& rList = GetListCtrl();
POSITION pos = rList.GetFirstSelectedItemPosition();
но способа сделать это в спинере я не смог, поэтому создал объект студента stt и присвоил ему значение студента из view и в спинере использовал этого студента для получения данных
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 13:28 10
Цитата Сообщение от yegor8 Посмотреть сообщение
но способа сделать это в спинере я не смог, поэтому создал объект студента stt и присвоил ему значение студента из view и в спинере использовал этого студента для получения данных
Сделай указатель на текущего студента и всё
1
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 21:23  [ТС] 11
Спасибо кажется дело сдвинулось с мертвой точки. Не могли бы вы подсказать как открыть диалоговое окно, а затем сравнить диалоговое окно с кнопкой ок.
Если сделать так
C++
1
2
3
dlg.DoModal();
          .....
    if ( dlg.DoModal() == IDOK)
то вылезает 2 окна.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 21:37 12
Цитата Сообщение от yegor8 Посмотреть сообщение
то вылезает 2 окна.
Потому что ты два раза сделал DoModal(). Сделай один раз.
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 22:06  [ТС] 13
я вижу мне надо сначала открыть диалог проделать в нем действия и затем сравнить его с IDOK
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 22:08 14
Цитата Сообщение от yegor8 Посмотреть сообщение
я вижу мне надо сначала открыть диалог проделать в нем действия и затем сравнить его с IDOK
DoModal() и открывает диалог. И возвращает то, что ты передал в EndDialog
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
08.05.2020, 10:23  [ТС] 15
Вот код спина.
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
void CStudentEditDlg::OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    spinner.SetRange(1, 9);
    if (pNMUpDown->iPos == 0)
    {
        oc1 = 1111;
        predm1 = "ldewd";
        UpdateData(FALSE);
    }
    if (pNMUpDown->iPos == 1)
    {
        oc1 = 2222;
        predm1 = "2222";
        UpdateData(FALSE);
    }
    if (pNMUpDown->iPos == 2)
    {
        oc1 = 3333;
        predm1 = "3333";
        UpdateData(FALSE);
    }
    // TODO: добавьте свой код обработчика уведомлений
    *pResult = 0;
}
При переключении спина из 3 в 2 и из 2 в 3 значение эдитов не меняется. Почему?

Добавлено через 4 минуты
Когда переключаюсь от 3 к 2 pNMUpDown->iPos = 4, но я не понимаю почему.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 14:23 16
Цитата Сообщение от yegor8 Посмотреть сообщение
Когда переключаюсь от 3 к 2 pNMUpDown->iPos = 4, но я не понимаю почему.
Посмотри, чему равно pNMUpDown->iDelta
Цитата Сообщение от yegor8 Посмотреть сообщение
spinner.SetRange(1, 9);
Это можно не делать при каждом сообщении от контрола, достаточно сделать один раз в OnInitDialog
1
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
08.05.2020, 16:10  [ТС] 17
Посмотрел iDelta и заметил странности в его поведении. Так например при переходе от 4 к 3 он не меняется, хотя должен бы ведь позиция спина изменилась, от 3 к 2 равен -1 хотя ipos =4, хотя я думал что если idelta отрицательный то ipos должен уменьшиться. А по поводу OnInitDialog этот метод находится в классе CDialog, мне удалось найти только его объявление.

Добавлено через 1 минуту
Я понял что в ифе должен объединить условия ipos и idelta
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 16:10 18
Цитата Сообщение от yegor8 Посмотреть сообщение
Посмотрел iDelta и заметил странности в его поведении. Так например при переходе от 4 к 3 он не меняется, хотя должен бы ведь позиция спина изменилась, от 3 к 2 равен -1 хотя ipos =4, хотя я думал что если idelta отрицательный то ipos должен уменьшиться. А по поводу OnInitDialog этот метод находится в классе CDialog, мне удалось найти только его объявление.
Покажи весь код диалога
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
08.05.2020, 16:30  [ТС] 19
Спасибо вам большое. Идея ко мне уже пришла, если что-то не получится я напишу.
0
08.05.2020, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2020, 16:30
Помогаю со студенческими работами здесь

WinApi.Edit Control, Listbox
Доброго время суток! Только начала изучать WinApi, читаю кучу литературы много чего не понятно все...

Edit Control в MFC (VS2005)
Подскажите, как разрешить вводить только определенные символы в Edit. Например что бы можно было...

Обработка ввода Edit Control
Доброй ночи) Есть небольшая программка на MFC, dialog based на ней есть Edit. Суть проблемы: как...

MFC Edit Control - переменные
Как осуществить простейшую запись из Edit Control в переменную, а потом обратно переменную вывести...

Как использовать Edit Control в MFC?
Пишу калькулятор на МФЦ. Нужна помощь! Не знаю ничего об мфц, что и как. Делать нужно срочно, нужны...

MFC вывод результата в Edit Control
Всем привет, такой вопрос. есть приложение, считаю по формуле. все данные завожу через Edit...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru