2017-01-03 7 views
0

Вот кусок кода, который помещает все элементы на parent (wxPlane):WxWidgets: wxDatePickerCtrl расширяется без видимой причины

parent->DestroyChildren(); 
wxBoxSizer* EntrySizer=new wxBoxSizer(wxVERTICAL); 
    EntryTitle = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); 
    EntryTitle->Wrap(-1); 
    EntrySizer->Add(EntryTitle, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5); 

    wxBoxSizer* ValueSizer=new wxBoxSizer(wxHORIZONTAL); 
     Value_ = new wxStaticText(parent, wxID_ANY, wxT("Значение:"), wxDefaultPosition, wxDefaultSize, 0); 
     Value_->Wrap(-1); 
     ValueSizer->Add(Value_, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5); 

     wxDateTime t;t.ParseISODate(strvalue); 
     Value = new wxDatePickerCtrl(parent, wxID_ANY, t); 
     ValueSizer->Add(Value, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5); 
    EntrySizer->Add(ValueSizer, 1, wxEXPAND, 5); 

    EntrySizer->Add(0, 0,1, wxEXPAND, 5); 
parent->SetSizer(EntrySizer); 
parent->Layout(); 

Value->Bind(wxEVT_DATE_CHANGED,DateEntry::Edit,this); 
Value->SetFocus(); 

Он должен выглядеть следующим образом (быстрый пример wxFormBuilder):

Но вместо этого это выглядит так:

Что я делаю неправильно? Может, что-то с флагами?

Вот минимальный, полный и Проверяемость пример кода, который показывает проблему более просто:

#include <wx/wx.h> 
#include <wx/app.h> 
#include <wx/datectrl.h> 

class cApp : public wxApp 
{ 
public: 
    virtual bool OnInit(); 

}; 

class cFrame: public wxFrame 
{ 
public: 
    cFrame(wxFrame *frame, const wxString& title) 
     : wxFrame(frame, -1, title, 
        wxPoint(-1,-1),wxSize(600,600)) 
    { 
     wxBoxSizer* ValueSizer = 
      new wxBoxSizer(wxHORIZONTAL); 
     wxDatePickerCtrl * Value = 
      new wxDatePickerCtrl(this, wxID_ANY, wxDefaultDateTime); 
     ValueSizer->Add(Value, 0, wxALL, 5); 

     SetSizer(ValueSizer); 
     Layout(); 
    } 
}; 

IMPLEMENT_APP(cApp); 

bool cApp::OnInit() 
{ 
    cFrame* frame = 
     new cFrame(0L, _("so41451250")); 
    frame->Show(); 

    return true; 
} 
+0

Попробуйте следующее: ValueSizer-> Добавить (значение, 0, wxEXPAND, 5); – Igor

+0

Нет, то же самое. –

ответ

0

Возможное решение установить размер wxDatePickerCtrl напрямую. И установите пропорцию = 0 в функции «Добавить» сизера, как предложено Igor.

#include <wx/wx.h> 
#include <wx/app.h> 
#include <wx/datectrl.h> 

class cApp : public wxApp 
{ 
public: 
    virtual bool OnInit(); 
}; 

class cFrame: public wxFrame 
{ 
public: 
    cFrame(wxFrame *frame, const wxString& title) 
     : wxFrame(frame, -1, title, wxPoint(-1, -1), wxSize(400, 400)) 
    { 
     wxBoxSizer* EntrySizer = new wxBoxSizer(wxVERTICAL); 
     wxStaticText *EntryTitle = new wxStaticText(this, wxID_ANY, title, 
                wxDefaultPosition, 
                wxDefaultSize, 0); 
     EntrySizer->Add(EntryTitle, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5); 

     wxBoxSizer* ValueSizer = new wxBoxSizer(wxHORIZONTAL); 
     wxStaticText *Value_ = new wxStaticText(this, wxID_ANY, wxT("Значение:"), 
               wxDefaultPosition, wxDefaultSize, 0); 
     ValueSizer->Add(Value_, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); 
     wxDatePickerCtrl *Value = new wxDatePickerCtrl(this, wxID_ANY, 
                 wxDefaultDateTime, 
                 wxDefaultPosition, 
                 wxSize(85, 23)); 
     ValueSizer->Add(Value, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5); 

     EntrySizer->Add(ValueSizer, 1, wxEXPAND, 5); 
     EntrySizer->Add(0, 0, 1, wxEXPAND, 5); 
     SetSizer(EntrySizer); 
     Layout(); 
    } 
}; 

IMPLEMENT_APP(cApp); 

bool cApp::OnInit() 
{ 
    cFrame* frame = new cFrame(0L, wxT("Дата обследования")); 
    frame->Show(); 
    return true; 
} 

Screenshot.

я не знаю, однако, почему некоторые элементы управления получают расширены без причины (т.е. когда доля = 0 и т.д.).