проблема с listbox
Я делаю так, вроде все логично, но выскакивает еррор.
CDlg dlg;
Во 2 окне зарегистрировал ClistBox list;
В 1 пишу при нажатии на кнопку dlg.list.addstring("asd"); - вот тут ошибка. Че делать?
Ребята, и девченки , если есть, )) подскажите новичку как правильно поступить. Есть главный диалог. Я создаю еще один. Регистрирую его. Во 2 размещен listbox я хочу, чтобы при нажатии в 1 диалоге на конпку в листбокс добавить некую строку.
Я делаю так, вроде все логично, но выскакивает еррор.
CDlg dlg;
Во 2 окне зарегистрировал ClistBox list;
В 1 пишу при нажатии на кнопку dlg.list.addstring("asd"); - вот тут ошибка. Че делать?
Все дело в том, что пока Вы не сделали так:
dlg.DoModal() - то ClistBox list все еще не ассоциирован с конкретным окном (листбоксом).
Так что делаем так: заводим новую переменную в классе CDlg, например
CStringArray initialList;
Затем создаем (через ClassWizard) Функцию OnInitDialog - и тут пишем цикл, в котором строки из initialList перекидываем в list.
Ну а по нажатию кнопки заполняем уже не list, а initialList.
Все дело в том, что пока Вы не сделали так:
dlg.DoModal() - то ClistBox list все еще не ассоциирован с конкретным окном (листбоксом).
Так что делаем так: заводим новую переменную в классе CDlg, например
CStringArray initialList;
Затем создаем (через ClassWizard) Функцию OnInitDialog - и тут пишем цикл, в котором строки из initialList перекидываем в list.
Ну а по нажатию кнопки заполняем уже не list, а initialList.
Че то не проходит. Сделал как ты сказал, но все равно вылетает ошибка. Если строки выводить MessageBox ом, то они нормально вылазят, если пытаться добавить в listbox то error. Блин, че делать то. Вроде ты все логично рассказал...А вот интересно listbox в модальном окне в какой момент времени инициализируется...
Че то не проходит. Сделал как ты сказал, но все равно вылетает ошибка. Если строки выводить MessageBox ом, то они нормально вылазят, если пытаться добавить в listbox то error. Блин, че делать то. Вроде ты все логично рассказал...А вот интересно listbox в модальном окне в какой момент времени инициализируется...
В OnInitDialog уже само окно диалога создано, все контролы на нем созданы, но только не надо забывать, все это верно только ПОСЛЕ вызова OnInitDialog для базового класса (CDialog::OnInitDialog()).
Если это не помогает. То, напиши сюда, какая ошибка вылезает, что где пишет... Или в дебаггере поставь breakpoint на функции, где ты пишешь list.AddString(...) в функции OnInitDialog. В watches добавь переменную "err" (которая будет показывать то же, что и GetLastError()) - посмотри - чему равняется эта переменная после выполнения AddString(), и напиши сюда, либо сам в MSDN по коду ошибки определи эту ошибку - может поможет.
Спасибо большое. Я разобрался - все заработало. ТОлько у меня появился вопрос: чем вызвана необходимость вызова CDialog::OnInitDialog(), если она все равно вызывается при создании окна, или я ошибаюсь? Пока писал еще вопрос назрел: почему "сам язык" не добавляет функцию OnInitDialog(), ведь если я вызвал окно, значит мне что то оттуда надо
Если Вы не написали обработчик сообщения WM_INITDIALOG - это не значит, что это сообщение не обрабатывается.
А необходимость писать этот обработчик в Вашей программе вызвана тем, что Вы хотите при инициализации диалогового окна проделать некоторые действия, отличные от действий по-умолчанию.
И второй вопрос: если мне "таким" способом приходиться заполнять listBox, что же тогда будет если я захочу передать другоим компонентам другие данные?
Что в программе напишете, то и будет :)