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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
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 ?

Postby Chedman » Sat Apr 01, 2017 6:43 am

Использую 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: 1131
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

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

Postby T-Rex » Sat Apr 01, 2017 11:58 am

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

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 ?

Postby Chedman » Sun Apr 02, 2017 4:10 am

Спасибо, забыл, что validator, ничего и не знает об окнах, так как для окон создается своя копия валидаторов, в данном случае копия validator.
На самом деле мной решалась задача создания контролов в конструкторе копирования валидатора, но теперь понятно, что это нельзя сделать в нем, так как m_validatorWindow, задается после полной отработки конструктора копирования.
wxWidgets 2.8, minGW32, CodeBlocks

ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 2046
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Postby ONEEYEMAN » Mon Apr 03, 2017 2:06 pm

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


Return to “wxWidgets Development (Russian)”

Who is online

Users browsing this forum: No registered users and 2 guests