![]() |
|
|
![]()
|
|
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Привет.
Помогите пожалуйста. Не получается изменять текст в ListView при выборе элемента. void CEx06bDialog::OnItemchangedListview1(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LISTVIEW1); int nSelected = pNMListView->iItem; if (nSelected >= 0) { pList->SetItemText(nSelected,0,"222"); } *pResult = 0; } Спасибо. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Управление туда точно приходит?
Попробуй перерисовать:
-------------------- ... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Управление точно приходит, т.к. выделенный текст я могу просмотреть.
Но с перерисовкой тоже не получается. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
? В смысле дебагером? -------------------- ... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Нет.
CString strltem = pList->GetItemText(nSelected, 0); --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Так поставь точку останова и проверь. У меня следующий код точно работает. И перерисовка не нужна:
-------------------- ... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Объявил я DDX_Control(pDX, IDC_LISTVIEW1, m_wndFilter);
И привыболе элемента в ListView выдается ошибка. ![]() --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Когда именно появляется Assertion? При выполнении DDX_Control (DoDataExchange)? Тогда, скорее всего, ид-р лист-контрола не такокй как ты думаешь. Зайди отладчиком по ASSERT (нажми Retry) и посмотри, что ему не нравится.
Если нет, приведи код того метода, на котором падает ASSERT и покажи строку. -------------------- ... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Падает Здесь ->.
BOOL CListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText) { -> ASSERT(::IsWindow(m_hWnd)); ASSERT((GetStyle() & LVS_OWNERDATA)==0); LVITEM lvi; lvi.iSubItem = nSubItem; lvi.pszText = (LPTSTR) lpszText; return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi); } --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Странно если я нажимаю просто кнопку ОК, то он всеравно ругается и выдает ту же самую ошибку Ассерт.
--------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Я твой код просила, а не MFC. Там ошибок нет ... почти
Этот ASSERT говорит о том, что SetItemText вызывается в тот момент, когда контрол еще не существует. Т.е. "не-окно". Где ты вызываешь-то его? При выборе элемента (и попытке установить текст?) Тогда не связалась твоя переменная с контролом, увы...
Что тут странного... значит, заходит в твой обработчик. Сначала: 1) создаем в классе диалога переменную CLIstCtrl m_wndList 2) переопределяем виртуальную ф-ю DoDataExchange, в которую вставляем DDX_Control, предварительно убедившись, что идентфикатор контрола правильный 3) После этого переменной m_wndList можно пользоваться как окном. -------------------- ... |
|||
|
||||
| NewLine |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Не понимаю почему если я ставлю эти две строчки в
OnInitDialog() { CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LISTVIEW1); pList->SetItemText(3,0,"!!!"); } Все благополучно меняется. А если ставлю в обработчик события для (IDC_LISTVIEW1) сообщения LVN_ITEMCHANGED функцию void CEx06bDialog::OnItemchangedListview1(NMHDR* pNMHDR, LRESULT* pResult) { CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LISTVIEW1); pList->SetItemText(2,0,"!!!"); //pResult = 0; } Он меня просто выкидывает. --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что значит "выкидывает"? Этот самый ASSERT, о котором ты раньше писал?
Действительно, странно. Надо смотреть на pList, который в обработчике... Что там внутри? В смысле m_hWnd его чему равен? Может, ты его где-нибудь между делом удаляешь? Вложи весь код этого диалога. -------------------- ... |
|||
|
||||
| NewLine |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
Нет. Просто выкидывает из программы без ошибок.
Это сообщение отредактировал(а) NewLine - 22.5.2006, 17:53 --------------------
Компания NewLineStudio - Разработка программного обеспеченияOn-CRM.ru - интернет CRM система |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вроде на первый взгляд все честно, кроме одного: ты не вызываешь базовый метод из OnInitDialog. А должен - в самом начале. Видимо, поэтому у тебя не сработал фокус с DDX_Control: DoDataExchange вызывается именно из OnInitDialog базового класса.
Непонятно, откуда вылет, да еше и не в отладчик, а вообще. Посмотри, что у тебя в pList перед вызовом SetItemText. Но вообще, ты бы навел порядок с переменными и контролами. Не через GetDlgItem и т.д., а заведи себе переменные для контролов, к которым часто обращаешься, и свяжи через DDX_COntrol. Легче будет разобраться в этой каше... Ну а потом, если эффект не исчезнет, ищи источник: комментируй все, кроме обращений с ListCtrl, и добейся, чтобы работало. Потом по-немногу открывай. Кто-то где-то кого-то ... -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |