Page 1 of 1

как достать wxListCtrl

Posted: Sun May 31, 2009 8:12 pm
by Big_Lebowski
Всем привет, я новичек в wxWidgets,
не могу понять как мне получить доступ к свой свойствам дочернего объекта.

На пример, у меня есть MainFrame на ней wxBoxSizer в нем wxNoteBook а этом буке есть wxPanel в которой сидит еще один wxBoxSizer а в нем уже сидит главная цель всего кода wxListCtrl.
В другом wxBoxSizer-е на этой же панеле wxPanel есть кнопка wxButton нажав на которую я хочу изменить свойства wxListBox

допустим я хочу добавить еще одну колонку в wxListCtrl:

Code: Select all

m_listCtrl1->InsertColumn(0, wxT("Новая колонка"), wxLIST_FORMAT_LEFT, 80);
этот код я раньше вставлял в обработчик событий (по нажатию кнопки ОК) и он работал, но сейчас у меня появилось прмежуточное звено wxNoteBook и теперь добраться до wxListCtrl не могу.....

Подскажите как мне получить доступ к родительскому объекту?

Спасибо

Posted: Mon Jun 01, 2009 4:50 am
by Wintermute
Привет-привет.

Вообще говоря, я сейчас пишу небольшую утилитку, в основном окне которого как раз такая же схема элементов (в том числе wxListCtrl). И все действия у меня прописаны в статической таблице событий основного фрейма.
Я так полагаю, проблема не в том, что ты "не можешь добраться" до wxListCtrl (ведь ты просто ссылку на него хранишь как свойство объекта своего фрейма), а в том, что обработчик событий не вызывается больше. Может быть в другой вкладке у тебя есть кнопка с точно таким же Id (указывается вторым параметром). Либо (не исключено и такое) ты поменял идентификатор кнопки в таблице событий, но не поменял параметр при создании кнопки.
Попробуй поставить, например, в свой обработчик

Code: Select all

wxMessageBox(_("test"), _("test"), wxOK);
или лучше

Code: Select all

wxLogMessage(_("test"))

Posted: Mon Jun 01, 2009 6:03 am
by Big_Lebowski
Wintermute wrote:Привет-привет.

Вообще говоря, я сейчас пишу небольшую утилитку, в основном окне которого как раз такая же схема элементов (в том числе wxListCtrl). И все действия у меня прописаны в статической таблице событий основного фрейма.
Я так полагаю, проблема не в том, что ты "не можешь добраться" до wxListCtrl (ведь ты просто ссылку на него хранишь как свойство объекта своего фрейма), а в том, что обработчик событий не вызывается больше. Может быть в другой вкладке у тебя есть кнопка с точно таким же Id (указывается вторым параметром). Либо (не исключено и такое) ты поменял идентификатор кнопки в таблице событий, но не поменял параметр при создании кнопки.
Попробуй поставить, например, в свой обработчик

Code: Select all

wxMessageBox(_("test"), _("test"), wxOK);
или лучше

Code: Select all

wxLogMessage(_("test"))

Дело в том, что у меня таблицы событий вообще нет, все события я увязал через Connect(), а вот по поводу ID кнопки это идея, как я раньше не догадался, кнопок у меня 8 штук и за идентификаторы забыл.... попытаюсь покопаться в идентификаторах, о результатах сообщу.

Спасибо!

Posted: Thu Jun 04, 2009 10:10 am
by Big_Lebowski
Разобрался.... проблема была не wxListCtrl, а в ошибке при определении wxApp, формы я делал в формбилдере, там интерфейс в отдельном файле а главный фрейм с обработчиками в другом файле.... дак вот при инициализации wxApp нужно было указывать фрейм производный от дочернего класса интерфейса, а я указал непосредственно фрейм интрефейса..... в результате чего я немог добраться ни до wxListCtrl ни вообще не до чего, хотя компилировалось все ОК.