2017-01-03 2 views
0

hier ein Stück Code ist, der alle Elemente auf der parent (wxPlane) setzt:WxWidgets: wxDatePickerCtrl erweitert ohne sichtbaren Grund

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(); 

Es gefällt das (kurzes Beispiel in wxFormBuilder) aussehen sollte:

Aber stattdessen sieht es so aus:

Was mache ich falsch? Vielleicht etwas mit Fahnen? Hier

ist ein Minimal, Complete, und prüfbare Beispiel-Code, der das Problem einfacher zeigt:

#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

Versuchen Sie Folgendes: ValueSizer-> Add (Value, 0, wxEXPAND, 5); – Igor

+0

Nein, das Gleiche. –

Antwort

0

Eine mögliche Lösung ist die Größe des wxDatePickerCtrl direkt einzustellen. Und setzen Sie proportional = 0 in der "Add" -Funktion des Sizer, wie von Igor vorgeschlagen.

#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.

, weiß ich aber nicht, warum manche Kontrollen ohne Grund erweitert erhalten (das heißt, wenn Anteil = 0 etc.).