Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.80
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
#1

ListBox в MFC - Visual C++

28.04.2009, 21:57. Просмотров 6719. Ответов 17
Метки нет (Все метки)

Здравствуйте, Уважаемые Программисты, у меня тут вопросик по Visual C++ 6.0, воюю с ним уже оч долго. У меня в 1 классе (класс имеет имя Adress) имеется переменная, связанная с listbox- m_listbox (control))- я там с ней чудненько работаю,добавляю, удаляю строчки, проблем ноль,но проблема встает,когда я из другого класса хочу добавить в тот ListBox строку. Компилятор ошибок не выдает, но и с переменной явно не работает, то есть, например:
у меня в классе Adress переменная- m_listbox объявлена в public,
в другом классе, который является самостоятельным и не наследует ничего от предыдущего, мне нужно добавить строку в этот самый лист бокс, пишу во втором классе следующее :
C++
1
2
3
4
5
6
7
8
{ ...
 
Adress dialog;
UpdateData(TRUE);
dialog.m_listbox.AddString("1234567"); //никаких действий при этом не происходит(((
UpdateData(FALSE);
 
}
собственно ничего в листбокс не добавляет и ошибок не выдает(((( Помогите, плз, совсем замучилась с этим((((((
Спасибо всем, кто сможет хоть какие-нить идейки подкинуть
http://www.cyberforum.ru/visual-cpp/thread411380.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2009, 21:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос ListBox в MFC (Visual C++):

ListBox в MFC
Как можно создать колонки в ListBox, чтоб например у меня было 3 строки 1...

Из файла в ListBox (MFC)
Как из файла занести информацию в Listbox. Пытаюсь уже 3 часа занести, ничего...

MFC ListBox сортировка
Всем доброго времени суток!! Подскажите, пожалуйста, как через код мне...

Отобразить в ListBox сумму чисел (MFC)
В верхней задаче нужно ввести число в едит. потом выбрать радиобаттон с числом...

При двойном клике по строке ListBox показать окно с возможностью редактирования этой строки (MFC)
Здравствуйте, как сделать так что бы при двойном клике по строке listBoxa...

17
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2009, 22:13 #2
Добрый день,
на какой стадии и каким способом у тебя m_listbox связывается с листбоксом, который на форме? Конструктор?
После создания объекта:
C++
1
Adress dialog;
Как dialog.m_listbox после этого становится связан с элементом окна?

Проще всего поставить брейкпойинт на строку с AddString и посмотреть с чем связан член класса m_listbox. Раз война с VC++ идет долго, это не должно стать проблемой.

Тебе нужно UpdateData вызывать у нужного тебе диалога, а не просто UpdateData. Если я работаю с каким-то диалогом и "нахожусь" не внутри него, то
C++
1
dialog_object.UpdateData(...
А сейчас ты вызываешь его для своего класса, в котором работаешь.

P. S. извиняюсь, если что напутал. давно не работаю c VS
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
28.04.2009, 22:15 #3
А что, собственно, должно происходить? Все происходит как надо, только ты этого не видишь
У тебя в этом коде dialog - локальная переменная. А окно этого dialog - не существует и поэтому не видно на экране (т.е. объект dialog существует, но никакое окно на экране с ним не сопоставлено и не видимо). Вот если ты после UpdateData(FALSE); вызовешь, например, dialog.DoModal(); - ты увидишь свои изменения. Окно нужно создать и сделать видимым - это и делает сразу DoModal() (можно, конечно, сделать то же самое и иначе, немодально).

Но есть у меня подозрение, что этот код вообще не делает то, чего ты добиваешься..... dialog вообще должен отображать другое окно, нет? Тогда разберись с тем, что такое локальная переменная.
0
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
28.04.2009, 22:29  [ТС] #4
Vourhey, m_listbox я создаю через ClassWizard/MemberVariables, там указываю класс Adress, выбираю мой ListBox->AddVariable->category-control,variable Type-CListBox.
Что касается "как dialog.m_listbox после этого становится связан с элементом окна"- я чет не совсем понимаю вопроса) уж простите девушку) сложновато у мя идет программирование, так что прошу сразу без обид, если я что-нить не понимаю или глупые вопросы задаю))))
А еще не подскажите, как мне этот самый брейк поинт установить? я с таким не работала))))) еще раз сорри за, наверное, глуповатый вопрос)
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2009, 22:32 #5
Я в сообщении написал про UpdateData у класса. Проверяла?
Ну можно и не брейкпоинт, а пошагово зайти в функцию UpdateData. Посмотри, учавствует ли в апдейте айдишник твоего бокса.

P. S. как это делается описано в статьях по отладке в VC++, здесь долго описывать, да и лень
1
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
28.04.2009, 22:43  [ТС] #6
CheshireCat, попробовала прописать dialog.Domodal(); в итоге он все равно ниче нового мне не вывел и строчку не добавил((((
Постараюсь описать еще раз то, что я хочу сделать:
вообщем начну издалека) у меня есть диалоговое окно, в котором находится тот самый злополучный ListBox, с этим диалоговым окном1 у меня связан класс -Adress,
но у меня имеется необходимость вызывать это диалоговое окно1 с listBox из другого диалогового окна2 - с ним у меня связан другой класс-Class2. На этом окне2 есть кнопка, по нажатию которой у меня должна по идее добавляться новая строка в старый лист бокс диалогового окна1) Вот) так понятнее стало, что я хочу сделать?

Добавлено через 2 минуты 16 секунд
Пасип, попробую

Добавлено через 4 минуты 20 секунд
Vourhey, пасипки, попробую)
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2009, 22:44 #7
Я о чем вообще речь виду. Вот у тебя две строчки:
C++
1
2
Adress dialog;
UpdateData(TRUE);
У тебя есть объект dialog. А вопрос: UpdateData у тебя для кого вызывается? Посмотри. Не для объекта Dialog это видно
Думаю, должно быть что-то типа:
C++
1
dialog.UpdateData(TRUE);
и так далее.
0
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
28.04.2009, 22:51  [ТС] #8
Vourhey, я тока что прописала как ты говорил
dialog.UpdateData(TRUE) итд, он ошибок не выдал, но снова ниче не сделал((( так и недобавил эту строчку((( мне кажется, тут проблема в том, что 2ое диалоговое окошко не воспринимает переменную, объявленную в другом классе.. поэтому и изменения не сохраняет или не вносит... понимаешь, там даже тупо если так я просто из лист бокса попробую уже введенную туда строку вывести из другого окна-снова тоже самое будет..
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2009, 22:57 #9
Надеюсь, обе UpdateData вызывала через объект dialog? И первый и второй? В любом случае, ошибка в твоем коде есть. Точнее, две. Ты должна вызывать UpdateData у объекта dialog. В противном случае ты апдейтишь вообще другой объект
Тогда мое предположение, что, все-таки, m_listbox не связан с боксом на окне. Тогда тебе нужно зайти в UpdateData первый и проверить выполнение DDX-функций в классе address.
1
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
28.04.2009, 23:02  [ТС] #10
Vourhey, да, все Update вызывала через dialog,причем знаешь, что самое смешное?) вообще это мой курсач и я уже сталкивалась с такой проблемой- мне нужно было изменить значение обычной переменной, находящейся в другом классе, а он мне все время нули возвращал, вместо значения, в итоге эту проблему я решила объявив переменные как external в 1 из модулей, все заработало, моя преподша тогда не могла мне сказать в чем косяк,когда я вызывала через тот самый дайлог.. в итоге щас она меня снова заставила работать с этой передачей из класса в класс((( только тут мне никак не объявить ее как общую для всех((((
лан, буду копаться, спасибо большое за помощь и прости за тупняки)
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2009, 23:09 #11
Не надо ничего объявлять как экстернал. Все будет работать. Я много проектов делал в VS. И диалоговые объекты я где только не создавал. Все нормально работает. Если правильно написан код
Так что, проверь как ведет себя апдейт пошагово. если не знаешь как, то нужно почитать про отладку в VS. Очень пригодится в будущем. От этого никуда не уйдешь в большой проекте.
Удачи.
0
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
28.04.2009, 23:11 #12
Ошибка, в общем-то, тривиальная... Если хочешь, выложи куда-нить свой код и дай ссылку. Сразу не обещаю, но гляну.... только припиши, куда именно глядеть - если там много букаф, то искать, сама понимаешь, дело труба.....
0
YurA_280784
Заблокирован
29.04.2009, 09:37 #13
Да прописать в своём классе переменную CListBox m_list и когда хотим с этим листом чего нить сделать пишем m_list = m_listbox, а потом работать. Я почитал и мне кацца что переменная CListBox в самом классе не инициализируется, т.е не связана с контролом окна, вот и не выходит.
А вообще предлагаю сделать вот так
C++
1
2
3
4
5
6
7
8
9
10
11
class Adress
{
 public :
 void AddListString(CListBox &m_list, CString str);
 //
};
 
void Adress::AddListString(CListBox &m_list, CString str)
{
      m_list.AddString(str);
}
И ноль проблем будет....
1
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
29.04.2009, 12:35  [ТС] #14
ВСЕМ БОЛЬШОЕ СПАСИБО ЗА ПОМОЩЬ) Я ТАКИ СДЕЛАЛА) ПРАВДА НЕ ТАК, КАК планировала изначально) я решила не париться с передачей параметров) сделала на той форме еще 1 листбокс и в него просто скопировала содержимое старого лист бокса и добавила новую строку) все это дело передаю из 1го в другой через запись в файл)

Добавлено через 2 минуты 6 секунд
На самом деле очень приятно, что вы мне все так помогаете!) спасибо большое еще раз!!!!!!!
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2009, 12:54 #15
Ой, ой, ой...через файл. Это мы винт юзаем, чтобы листбокс заполнить... Какой кошмар
0
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
29.04.2009, 22:46  [ТС] #16
ну че ты от девушки хочешь)))))? зато сделала))))
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2009, 22:55 #17
Не. Незачет
Какая разница, девушка, или нет. Мы программируем, а не мешки таскаем. Задача не решена
0
Mashylya
0 / 0 / 0
Регистрация: 22.04.2009
Сообщений: 8
30.04.2009, 21:08  [ТС] #18
)))) ну простите меня))) что поделаешь))) я пока только учусь программировать))))
а вообще мне на 1ом курсе вдалбливали "истину" : "девушка не может быть программистом"))
ну это так) нелепые отмазки)
0
30.04.2009, 21:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2009, 21:08
Привет! Вот еще темы с решениями:

Из MFC 2012 в MFC 2005
Есть прокт для студии 12, всё хорошо, писал на 8ке в VS 2012 и он отлично...

подключение классов MFC к не MFC
Как подключить MFC Class From ActiveX Control к не MFC проекту? т.е. пишу...

Возможно ли перетаскивание элементов (drag/drop) внутри listbox и между двумя listbox?
Подскажите возможно ли перетаскивание элементов внутри listbox и между двумя...

MFC
Что делать, если не открываеьтся диалоговое окно, в.rc выдает, что оно открыто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru