Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0 ?

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
Chedman
Earned a small fee
Earned a small fee
Posts: 15
Joined: Thu Sep 11, 2008 8:27 am
Contact:

Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0 ?

Post by Chedman »

Использую wxWidgets 2.8.12, компилятор MinGW 4.9.2, ОС Windows 7

Code: Select all

    wxPanel* panel=new wxPanel(this);

    wxMessageBox(wxString::Format(wxT("%p"),panel));

    int val;
    wxGenericValidator validator(&val);

    panel->SetValidator(validator);
/// Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0
    wxMessageBox(wxString::Format(wxT("%p"), validator.GetWindow()));

    validator.SetWindow(panel);

    wxMessageBox(wxString::Format(wxT("%p"), validator.GetWindow()));

wxWidgets 2.8, minGW32, CodeBlocks
User avatar
T-Rex
Moderator
Moderator
Posts: 1248
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Re: Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0 ?

Post by T-Rex »

Так задумано. Всегда есть возможность посмотреть на реализацию

Code: Select all

#if wxUSE_VALIDATORS
// ----------------------------------------------------------------------------
// validators
// ----------------------------------------------------------------------------
void wxWindowBase::SetValidator(const wxValidator& validator)
{
    if ( m_windowValidator )
        delete m_windowValidator;

    m_windowValidator = (wxValidator *)validator.Clone();

    if ( m_windowValidator )
        m_windowValidator->SetWindow(this);
}
#endif // wxUSE_VALIDATORS
Для работы с валидатором контрола вон метод есть.
Chedman
Earned a small fee
Earned a small fee
Posts: 15
Joined: Thu Sep 11, 2008 8:27 am
Contact:

Re: Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0 ?

Post by Chedman »

Спасибо, забыл, что validator, ничего и не знает об окнах, так как для окон создается своя копия валидаторов, в данном случае копия validator.
На самом деле мной решалась задача создания контролов в конструкторе копирования валидатора, но теперь понятно, что это нельзя сделать в нем, так как m_validatorWindow, задается после полной отработки конструктора копирования.
wxWidgets 2.8, minGW32, CodeBlocks
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7458
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: Почему после SetValidator() для wxPanel имеем validator.GetWindow()==0 ?

Post by ONEEYEMAN »

It is documented - therefore it is a feature. ;-)
Post Reply