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

Связь Edit control и Spin Control

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

Студворк — интернет-сервис помощи студентам
Здравствуйте. Имеется spin control и связанный с ним edit и множество прочих editов. Надо добиться того чтобы при разных значениях spina, значения у editов различались и впоследствии сохранить их в массив. Например полей эдитов 10, счетчик крутится 9 раз, значит всего 90 разных значений, которые надо записать в массив.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2020, 22:51
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от yegor8 Посмотреть сообщение
я пытался отслеживать местоположение спина с помощью pNMUpDown->iPos, но вышло неудачно.
А что не получилось?
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 11:32  [ТС]
то есть вместо 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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 13:28
Цитата Сообщение от yegor8 Посмотреть сообщение
но способа сделать это в спинере я не смог, поэтому создал объект студента stt и присвоил ему значение студента из view и в спинере использовал этого студента для получения данных
Сделай указатель на текущего студента и всё
1
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 21:23  [ТС]
Спасибо кажется дело сдвинулось с мертвой точки. Не могли бы вы подсказать как открыть диалоговое окно, а затем сравнить диалоговое окно с кнопкой ок.
Если сделать так
C++
1
2
3
dlg.DoModal();
          .....
    if ( dlg.DoModal() == IDOK)
то вылезает 2 окна.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 21:37
Цитата Сообщение от yegor8 Посмотреть сообщение
то вылезает 2 окна.
Потому что ты два раза сделал DoModal(). Сделай один раз.
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
07.05.2020, 22:06  [ТС]
я вижу мне надо сначала открыть диалог проделать в нем действия и затем сравнить его с IDOK
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.05.2020, 22:08
Цитата Сообщение от yegor8 Посмотреть сообщение
я вижу мне надо сначала открыть диалог проделать в нем действия и затем сравнить его с IDOK
DoModal() и открывает диалог. И возвращает то, что ты передал в EndDialog
0
0 / 0 / 0
Регистрация: 05.05.2015
Сообщений: 40
08.05.2020, 10:23  [ТС]
Вот код спина.
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
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 14:23
Цитата Сообщение от 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  [ТС]
Посмотрел iDelta и заметил странности в его поведении. Так например при переходе от 4 к 3 он не меняется, хотя должен бы ведь позиция спина изменилась, от 3 к 2 равен -1 хотя ipos =4, хотя я думал что если idelta отрицательный то ipos должен уменьшиться. А по поводу OnInitDialog этот метод находится в классе CDialog, мне удалось найти только его объявление.

Добавлено через 1 минуту
Я понял что в ифе должен объединить условия ipos и idelta
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 16:10
Цитата Сообщение от 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  [ТС]
Спасибо вам большое. Идея ко мне уже пришла, если что-то не получится я напишу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2020, 16:30
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью 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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru