Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > получение текста с CEdit


Автор: mrgloom 8.11.2012, 13:40
Есть главное окно, на нем кнопка добавить, по кнопке вызывается диалог, в котором вводится текст, текст потом сохраняется в переменную.

Код

void CMainWindowDlg::OnBnClickedAdd()
{
    CProfileNameSelect dlg;
    if(dlg.DoModal() == IDOK)
    {
               CString str = _T("");
        dlg.m_ProfileName.GetWindowText(str); //тут падает
        }
}

почему падает?

если же сделать так внутри обработчика нажатия ок самого окна в котором пишется текст, то всё ок.
Код

void CProfileNameSelect::OnBnClickedOk()
{
    CString str;
    GetDlgItemText(IDC_SELECT_PROFILE_NAME, str);
    OnOK();
}

Автор: Albor 8.11.2012, 14:05
падает потому что все оконные объекты диалога уже разрушены и к ним нельзя обращаться. 

Автор: Earnest 9.11.2012, 16:11
Другими словами, текст из эдита в диалоге можно получить только при жизни самого диалога. Например в обработчике OnOK. Хотя обычно это делают в DoDataExchange. Т.е. придется завести в классе диалога переменную-строку, в которую записать данные из эдита. После разрушения окна-диалога строка никуда не денется.

Автор: mrgloom 13.11.2012, 15:16
да, так всё и оказалось, либо заводить переменную вунтри класса окна либо передавать в какую нибудь внешнюю в OnOK().
но вообще то как то это не очень логично, что окно разрушается, а переменные у класса окна доступны, но понять всё равно можно.

Автор: Albor 13.11.2012, 18:17
Цитата(mrgloom @  13.11.2012,  14:16 Найти цитируемый пост)
но вообще то как то это не очень логично, что окно разрушается, а переменные у класса окна доступны, но понять всё равно можно.

Всё вполне логично: оконная часть объекта своё отработала и уничтожена, а остальное работоспособно. Если захочется, то можно снова вызвать DoModal() и отобразить окно сколько угодно раз.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)