Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с listbox

1.9K
24 мая 2005 года
nicohack
60 / / 17.04.2004
Ребята, и девченки , если есть, )) подскажите новичку как правильно поступить. Есть главный диалог. Я создаю еще один. Регистрирую его. Во 2 размещен listbox я хочу, чтобы при нажатии в 1 диалоге на конпку в листбокс добавить некую строку.

Я делаю так, вроде все логично, но выскакивает еррор.

CDlg dlg;

Во 2 окне зарегистрировал ClistBox list;

В 1 пишу при нажатии на кнопку dlg.list.addstring("asd"); - вот тут ошибка. Че делать?
831
24 мая 2005 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by nicohack
Ребята, и девченки , если есть, )) подскажите новичку как правильно поступить. Есть главный диалог. Я создаю еще один. Регистрирую его. Во 2 размещен listbox я хочу, чтобы при нажатии в 1 диалоге на конпку в листбокс добавить некую строку.

Я делаю так, вроде все логично, но выскакивает еррор.

CDlg dlg;

Во 2 окне зарегистрировал ClistBox list;

В 1 пишу при нажатии на кнопку dlg.list.addstring("asd"); - вот тут ошибка. Че делать?



Все дело в том, что пока Вы не сделали так:
dlg.DoModal() - то ClistBox list все еще не ассоциирован с конкретным окном (листбоксом).

Так что делаем так: заводим новую переменную в классе CDlg, например

 
Код:
public:
    CStringArray initialList;


Затем создаем (через ClassWizard) Функцию OnInitDialog - и тут пишем цикл, в котором строки из initialList перекидываем в list.
Ну а по нажатию кнопки заполняем уже не list, а initialList.
1.9K
24 мая 2005 года
nicohack
60 / / 17.04.2004
Цитата:
Originally posted by S_T
Все дело в том, что пока Вы не сделали так:
dlg.DoModal() - то ClistBox list все еще не ассоциирован с конкретным окном (листбоксом).

Так что делаем так: заводим новую переменную в классе CDlg, например
 
Код:
public:
    CStringArray initialList;


Затем создаем (через ClassWizard) Функцию OnInitDialog - и тут пишем цикл, в котором строки из initialList перекидываем в list.
Ну а по нажатию кнопки заполняем уже не list, а initialList.


Че то не проходит. Сделал как ты сказал, но все равно вылетает ошибка. Если строки выводить MessageBox ом, то они нормально вылазят, если пытаться добавить в listbox то error. Блин, че делать то. Вроде ты все логично рассказал...А вот интересно listbox в модальном окне в какой момент времени инициализируется...

831
25 мая 2005 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by nicohack
Че то не проходит. Сделал как ты сказал, но все равно вылетает ошибка. Если строки выводить MessageBox ом, то они нормально вылазят, если пытаться добавить в listbox то error. Блин, че делать то. Вроде ты все логично рассказал...А вот интересно listbox в модальном окне в какой момент времени инициализируется...


В OnInitDialog уже само окно диалога создано, все контролы на нем созданы, но только не надо забывать, все это верно только ПОСЛЕ вызова OnInitDialog для базового класса (CDialog::OnInitDialog()).

Если это не помогает. То, напиши сюда, какая ошибка вылезает, что где пишет... Или в дебаггере поставь breakpoint на функции, где ты пишешь list.AddString(...) в функции OnInitDialog. В watches добавь переменную "err" (которая будет показывать то же, что и GetLastError()) - посмотри - чему равняется эта переменная после выполнения AddString(), и напиши сюда, либо сам в MSDN по коду ошибки определи эту ошибку - может поможет.

1.9K
25 мая 2005 года
nicohack
60 / / 17.04.2004
Спасибо большое. Я разобрался - все заработало. ТОлько у меня появился вопрос: чем вызвана необходимость вызова CDialog::OnInitDialog(), если она все равно вызывается при создании окна, или я ошибаюсь? И второй вопрос: если мне "таким" способом приходиться заполнять listBox, что же тогда будет если я захочу передать другоим компонентам другие данные? Пока писал еще вопрос назрел: почему "сам язык" не добавляет функцию OnInitDialog(), ведь если я вызвал окно, значит мне что то оттуда над
831
26 мая 2005 года
S_T
117 / / 23.10.2002
Цитата:
Originally posted by nicohack
Спасибо большое. Я разобрался - все заработало. ТОлько у меня появился вопрос: чем вызвана необходимость вызова CDialog::OnInitDialog(), если она все равно вызывается при создании окна, или я ошибаюсь? Пока писал еще вопрос назрел: почему "сам язык" не добавляет функцию OnInitDialog(), ведь если я вызвал окно, значит мне что то оттуда надо


Если Вы не написали обработчик сообщения WM_INITDIALOG - это не значит, что это сообщение не обрабатывается.
А необходимость писать этот обработчик в Вашей программе вызвана тем, что Вы хотите при инициализации диалогового окна проделать некоторые действия, отличные от действий по-умолчанию.

Цитата:

И второй вопрос: если мне "таким" способом приходиться заполнять listBox, что же тогда будет если я захочу передать другоим компонентам другие данные?


Что в программе напишете, то и будет :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог