Problem mit wxGrid in einem wxSizer



  • Hallo Community,

    ich verwende derzeit die wxWidgets Version 2.9.4. im Visual Studio 2012 Ultimate.
    Nur bin ich auf folgendes Problem gestoßen.:

    Ich möchte meinen Screen wie folgt Splitten

    |----------|----------|
    |          |          |
    |    1     |     1    |
    |          |          |
    |          |          |
    |----------|----------|
    |          |          |
    |    2     |    1     |
    |          |          |
    |          |          |
    |----------|----------|
    |xxxxxxxxxxxxxxxxxxxxx|
    |----------|----------|
    

    Was ohne Probleme funktioniert. In den Felder die mit 1 gekennzeichnet sind liegen einfache wxTextCtrl. In dem Feld mit der 2 ein wxGrid. Und unten ein einfaches wxPanel

    Hier mein TestCode dazu:

    // ..
     /* Meine Sizer */
    	wxBoxSizer* spAllerFirst = new wxBoxSizer(wxVERTICAL);
    	wxBoxSizer* spH1 = new wxBoxSizer(wxVERTICAL);
    	wxBoxSizer* spH1a = new wxBoxSizer(wxHORIZONTAL);
    	wxBoxSizer* spH1b = new wxBoxSizer(wxHORIZONTAL);
    
    	/* Meine Objecte */
    	wxGrid* newGrid = new wxGrid(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE | wxVSCROLL | wxHSCROLL);
    	wxTextCtrl* ctrl1 = new wxTextCtrl(this, wxID_ANY);
    	wxTextCtrl* ctrl2 = new wxTextCtrl(this, wxID_ANY);
    	wxTextCtrl* ctrl3 = new wxTextCtrl(this, wxID_ANY);
    	//wxTextCtrl* ctrl4 = new wxTextCtrl(this, wxID_ANY);
    	wxPanel* panelButton = new wxPanel(this,  wxID_ANY, wxDefaultPosition, wxDefaultSize);
    
    	/* Für Panels */
    	panelButton->SetBackgroundColour(*wxBLUE);
    
    	/* Grid mit Test-Daten */
    	newGrid->CreateGrid(2, 7);
    	newGrid->EnableScrolling(true, true);
    
    	newGrid->SetColLabelValue(0,_T("Vorname"));
    	newGrid->SetColLabelValue(1,_T("Name"));
    	newGrid->SetColLabelValue(2,_T("PLZ"));
    	newGrid->SetColLabelValue(3,_T("Ort"));
    	newGrid->SetColLabelValue(4,_T("Strasse"));
    	newGrid->SetColLabelValue(5,_T("Telefon"));
    	newGrid->SetColLabelValue(6,_T("Fax"));
    
    	newGrid->SetCellValue(0,0, _T("Hugo"));
    	newGrid->SetCellValue(0,1, _T("Muster"));
    	newGrid->SetCellValue(0,2, _T("48167"));
    	newGrid->SetCellValue(0,3, _T("Essen"));
    	newGrid->SetCellValue(0,4, _T("Weckerweg 1"));
    	newGrid->SetCellValue(0,5, _T("00099 / 5464562"));
    	newGrid->SetCellValue(0,6, _T("00099 / 6483282"));
    
    	newGrid->SetCellValue(1,0, _T("Hans"));
    	newGrid->SetCellValue(1,1, _T("Wecker"));
    	newGrid->SetCellValue(1,2, _T("12345"));
    	newGrid->SetCellValue(1,3, _T("Berlin"));
    	newGrid->SetCellValue(1,4, _T("Marxalle 5"));
    	newGrid->SetCellValue(1,6, _T("00001 / 4654833"));
    
    	/* Sizer verschachteln */
    	spH1a->Add(ctrl1, 50, wxEXPAND);
    	spH1a->Add(ctrl2, 50, wxEXPAND);
    	spH1b->Add(newGrid, 50, wxEXPAND);
    	spH1b->Add(ctrl3, 50, wxEXPAND);
    
    	spH1->Add(spH1a, 50, wxEXPAND);
    	spH1->Add(spH1b, 50, wxEXPAND);
    
    	spAllerFirst->Add(spH1, 95, wxEXPAND);
    	spAllerFirst->Add(panelButton,5, wxEXPAND);
    	SetSizer(spAllerFirst);
     // ..
    

    Jetzt stellt sich allerdings immer das Problem das das sich das wxGrid immer weiter ausdehnt als es ihm eigenlich erlaubt sein sollte. Will heißen jenachdem wieviele Spalten ich habe, dehnt sich dieses weiter nach rechts aus und nimmet dem wxTextCtrl seinen Platz weg.
    Sprich ich erhalte z.B. sowas

    |----------|----------|
    |          |          |
    |    1     |     1    |
    |          |          |
    |          |          |
    |---------------|-----|
    |               |     |
    |    2          |  1  |
    |               |     |
    |               |     |
    |               |     |
    |xxxxxxxxxxxxxxxxxxxxx|
    |----------|----------|
    

    Habe das gleiche mit dem 1:1 selben Quellcode auch unter wxWidgets Version 2.8.12. versucht. Dort funktioniert es einwandfrei und genau so wie erwünscht.
    Also das heißt der wxGrid, bekommt immer nur 50% des Bildschirmes und wenn Spalten nicht mehr reinpassen, erhalte ich meine Leisten zum verschieben.

    Ich weiß das wxWidgets 2.9.4. erst "Development Release" ist und noch nicht fehlerfrei ist. Vielleicht hat jemand schon eine Lösung für dieses Problem. Vielleicht fehlt mir auch nur irgendeine Flag die ich im Grid setzen muss oder so...

    Vielen Dank schon mal in voraus

    Greez Ollow



  • Für alle die es interessiert:

    Die Sizer wurden in Version 2.9.x dementsprechende geändert, das sie die Größe der Sizer nicht nach dem Verfügbaren Platz bestimmen sondern aus dem Minimalen Platz den das Object benötigen würde.

    Wenn man das alte Verhalten beibehalten möchte, muss der Code dementsprechend erweitert in dem man dem Element das in den Sizer kommt eine Mindestgröße zuordnet dies geschieht in diesem Beispiel durch

    newGrid->SetMinSize(wxSize(10,10));
    

Anmelden zum Antworten