есть несколько полей ввода данных. после того как данные введены, они сохраняются в список. название каждого элемента списка отображается в 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);
- все получается как нужно - обновляются все поля требуемыми значениями.
почему?