Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получение текста с CEdit 
:(
    Опции темы
mrgloom
Дата 8.11.2012, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



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

Код

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();
}


Это сообщение отредактировал(а) mrgloom - 8.11.2012, 13:40
PM MAIL   Вверх
Albor
Дата 8.11.2012, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



падает потому что все оконные объекты диалога уже разрушены и к ним нельзя обращаться. 
PM MAIL ICQ   Вверх
Earnest
Дата 9.11.2012, 16:11 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



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


--------------------
...
PM   Вверх
mrgloom
Дата 13.11.2012, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



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

Это сообщение отредактировал(а) mrgloom - 13.11.2012, 15:17
PM MAIL   Вверх
Albor
Дата 13.11.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



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

Всё вполне логично: оконная часть объекта своё отработала и уничтожена, а остальное работоспособно. Если захочется, то можно снова вызвать DoModal() и отобразить окно сколько угодно раз.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1276 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.