Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MFC, проблема с обновление полей воода данных  (Прочитано 11760 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bebabo
Помогающий

ru
Offline Offline

WWW
« : 25-12-2007 08:15 » 

есть несколько полей ввода данных. после того как данные введены, они сохраняются в список. название каждого элемента списка отображается в ListBox. при двойном клике на строке ListBoxa, введенные ранее данные обновляют поля ввода.
и вот столкнулся со следующей проблемой. если написать обработку двойного клика вот так
Код:
void CFlatDlg::OnLbnDblclkList1()
{
  CString temp;
  if(m_List2.GetCurSel() != LB_ERR)
    m_List2.GetText(m_List2.GetCurSel(), temp);
  SetDlgItemText(IDC_EDIT6, temp);

  // поиск выбранного пресета и обновление данных PressSheet
  CFlatApp::Preset search_preset(temp);
  std::list<CFlatApp::Preset>::iterator iter = CFlatApp::Preset::presets.begin();
  iter = find(CFlatApp::Preset::presets.begin(), CFlatApp::Preset::presets.end(), search_preset);
  if(iter != CFlatApp::Preset::presets.end()){
    ps_width = iter->width;
    ps_height = iter->height;
    gutter_by_x = iter->x_gutter;
    gutter_by_y = iter->y_gutter;
   
    CString s;
    s.Format("%.1f", ps_width);
    CWnd::SetDlgItemText(IDC_EDIT1, s);
    s.Format("%.1f", ps_height);
    CWnd::SetDlgItemText(IDC_EDIT2, s);
     s.Format("%.1f", gutter_by_x);   
    CWnd::SetDlgItemText(IDC_EDIT4, s);
   s.Format("%.1f", gutter_by_y);   
    CWnd::SetDlgItemText(IDC_EDIT5, s);
  }
}

то обновление происходит только в IDC_EDIT1, а в прочих полях выставляются нолики.
если сделать вот так
Код:
    CString s;
    ps_width = iter->width;
    s.Format("%.1f", ps_width);
    CWnd::SetDlgItemText(IDC_EDIT1, s);
    ps_height = iter->height;
    s.Format("%.1f", ps_height);
    CWnd::SetDlgItemText(IDC_EDIT2, s);
    gutter_by_x = iter->x_gutter;
    s.Format("%.1f", gutter_by_x);   
    CWnd::SetDlgItemText(IDC_EDIT4, s);
    gutter_by_y = iter->y_gutter;
    s.Format("%.1f", gutter_by_y);   
    CWnd::SetDlgItemText(IDC_EDIT5, s);

- все получается как нужно - обновляются все поля требуемыми значениями.
почему?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 25-12-2007 15:37 » 

начнём с того , что какого хрена приписано "CWnd::" и как это откомпилировалось вапще ? Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 25-12-2007 15:49 » 

странно - действительно компилится , хотя функция не статическая !! хм...
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 25-12-2007 18:47 » 

Так вызов откуда, из диалога? Тогда родительский метод - всё законно, вроде...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 25-12-2007 18:56 » 

всё, понял, туплю ))  Это же из самого класса , производного от CWnd , так что да - всё тут нормально )))

хотя так и не надо делать - всё же убрать CWnd:: надо
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 25-12-2007 19:02 » 

bebabo, вопрос , какие типы у переменных

ps_width
iter->width
ps_height
iter->height
gutter_by_x
iter->x_gutter
gutter_by_y
iter->y_gutter

?
Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #6 : 26-12-2007 08:50 » 

CWnd:: - это у меня как-то случайно вышло. убрал. вообще переделал обработку обновления полей. сделал UpdateData(FALSE), но все равно хочется разобраться с этим случаем.
тип у всех переменных - double. причем ps_width, ps_height, gutter_by_x, gutter_by_y - переменные назначенные полям ввода.
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 26-12-2007 14:04 » 

bebabo,  да блин, Госпидя... ты бы сказал сначала, что добавил член-переменные , связанные с контролом. А ты убери их нафик - и всё зачухает как надо Улыбаюсь А если не хочешь убирать , то нельзя  (вернее не стОит) пользоваться  Set/GetWindowText или SetDlgItemText. Одно из двух , смешивать не надо - намаешься ... Лично я предпочитаю без связанных членов-переменных , кроме случаев , когда использую свой класс контрола
Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #8 : 09-01-2008 10:42 » 

Алексей1153++, прости за дурацкий вопрос, но все же - а как тогда получить введенные в поле данные, если не использовать члены-переменные?
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 09-01-2008 10:52 » 

bebabo, для примера CEdit:

CString txt;
GetDlgItem(ID_...)->GetWindowText(txt);
Записан

bebabo
Помогающий

ru
Offline Offline

WWW
« Ответ #10 : 09-01-2008 10:56 » new

Алексей1153++, а понял! спасибо!
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines