проблема с Edit Control

Тема в разделе "MS Visual C++", создана пользователем Delfin, 21 мар 2008.

  1. Delfin

    Delfin Гость

    Репутация:
    0
    Здравствуйте!!!

    Проблема в следующем:
    На DialogBar я разместил Edit Control. В методе DoDataExchange пытаюсь связать его с переменной типа CString str_edit2.

    Код:
    void CMainFrame::DoDataExchange(CDataExchange* pDX)
    {
    // TODO: Add your specialized code here and/or call the base class
    CFrameWnd::DoDataExchange(pDX);
    
    DDX_Text(pDX, IDC_EDIT2, str_edit2);
    }
    Но, при вызове UpdateData вылезает ошибка (File: Dlgdata.cpp Line:44).

    Объясните пожалуйста, как приписать переменную к Edit Control в которой хранится его значение.
    Можете подсказать другой способ получения значения из Edit и передачи ему нового значения.
     
  2. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Ваш код не содержит ошибок, скорее всего проблема в чем-то другом
     
  3. Dimmuborgir

    Dimmuborgir Гость

    Репутация:
    0
    Поддерживаю European. Еще один способ работать с Edit контролом, как впринципе и с любым другим, унаследованным от CWnd (тип главное указать):

    Код:
    CString str_in;
    CString str_out="запись";
    
    CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
    pEdit->GetWindowText(str_in);
    pEdit->SetWindowText(&str_out);
     
  4. Delfin

    Delfin Гость

    Репутация:
    0
    Если создавать Edit Control через Edit1.Create(), то ниже представленный код работает без ошибок.

    [codebox]int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    .......................................
    .......................................
    m_myBar.Create(this, IDD_DIALOGBAR, CBRS_LEFT, IDD_DIALOGBAR);

    edit1.Create(WS_CHILD | WS_VISIBLE | WS_BORDER, CRect (100,40,270,70), this, IDC_EDIT2);

    return 0;
    }

    void CMainFrame::DoDataExchange(CDataExchange* pDX)
    {
    // TODO: Add your specialized code here and/or call the base class
    DDX_Text(pDX, IDC_EDIT2, str_edit2);
    }
    [/codebox]
    Ну, а если просто Edit Control кинуть на форму даолога и затем так же приписать его ID переменную str_edit, то вылезает ошибка.

    За SetWindowText и GetWindowText, СПАСИБО!!!
     
  5. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Ну так и должно быть, ведь это не Delphi. Вы пытаетесь обратится к объекту, который еще не создан. Это и вызывает ошибку
     
  6. Dimmuborgir

    Dimmuborgir Гость

    Репутация:
    0
    я тока одного не могу понять, Делфин, ты Едит контрол рисуешь на диалоге или пытаешься его где то во вьюшке нарисовать? При чем тут Диалог и манфрейм??? Если на диалог кинуть Едит контрол, то никаких Create вызывать не надо. все будет работать.
     
  7. Delfin

    Delfin Гость

    Репутация:
    0
    Как это объект не создан???
    Во первых, он отображается на DialogBar.
    Во вторых, я с ним свободно обмениваюсь сообщениями через SetWindowText и GetWindowText.

    Я пытаюсь вставить(вернее уже вставил) Edit на DialogBar.
    Что такое DialogBar, смотри тут http://doc.mpv.ru/steps/mfc/steps/250.html
    DialogBar, как ToolBar и StatusBar создается в методе int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct).
     
  8. Dimmuborgir

    Dimmuborgir Гость

    Репутация:
    0
    Перепутал с обычным диалогом. )
     
  9. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Ошибка в 17 строке... Одно гадание на кофейной гуще
     
  10. Delfin

    Delfin Гость

    Репутация:
    0
    Не в 17, а в 44 строке (если речь идет об одном и том же).

    И ошибка вылезает, когда я в методе void CMainFrame::DoDataExchange(CDataExchange* pDX) приписываю идентификатору IDC_EDIT2 переменную str_edit2 ( DDX_Text(pDX, IDC_EDIT2, str_edit2); ), а затем вызываю UpdateData.
    Т.е. ошибка вылазиет не во время компиляции, а во время работы программы, когда вызывается UpdateData.

    Если же задавть и получать значение Edit через SetWindowText и GetWindiwText, то все работает хорошо.
     
  11. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Прикрепите минимальный проект, отражающий проблему
     
  12. Delfin

    Delfin Гость

    Репутация:
    0
    Вот, смотрите.

    При нажатии на кнопку вылезает ошибка.
     

    Вложения:

    • DlBar.rar
      Размер файла:
      54,8 КБ
      Просмотров:
      17
  13. European

    Репутация:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    2
    Механизм DDX в MFC предназначен для обмена информацией между окном и его элементами управления. Вы же пытаетесь связать элемент управления Edit, прbнадлежащий CDialogBar, с другим окном (CMainFrame). Из-за этого и валится исключение из нутрей MFC. Код из поста #4 работает, т.к. Вы создаете Edit непосредственно на MainFrame в обход DialogBar. Правильным решением будет написать наследника CDialogBar, у которого перегрузить DoDataExchange
     
  14. Delfin

    Delfin Гость

    Репутация:
    0
    ок, СПАСИБО !!!
     
Загрузка...
Похожие Темы - проблема Edit Control
  1. Xatiko
    Ответов:
    2
    Просмотров:
    1.808
  2. Supermaximus
    Ответов:
    0
    Просмотров:
    2.827
  3. Alex1994
    Ответов:
    7
    Просмотров:
    104
  4. PingvinPingvin
    Ответов:
    10
    Просмотров:
    111
  5. Free2playman
    Ответов:
    14
    Просмотров:
    129

Поделиться этой страницей