0

问题

我有wxGrid很多行(> 200)放在一个wxFlexGridSizer. 问题是我在网格下方的按钮消失了。使用比例设置的wxBoxSizer作品也是如此。

结果应该看起来像 wxBoxSizer 解决方案。有没有办法wxFlexGridSizer在这种情况下使用?

wxBoxSizer(工作)

wxBoxSizer 截图

    wxGrid *grid = new wxGrid(this, wxID_ANY);
    grid->CreateGrid(0, 2);
    grid->SetDefaultRowSize(20);
    grid->AppendRows(200);

    wxButton *button = new wxButton(this, wxID_ANY, "button");

    wxBoxSizer *bsMain = new wxBoxSizer(wxHORIZONTAL);
    bsMain->Add(grid, 1, wxALL, 5);
    bsMain->Add(button, 0, wxALL, 5);

    SetSizer(bsMain);

wxGridSizer(不工作)

wxFlexGridSizer 截图

    wxGrid *grid = new wxGrid(this, wxID_ANY);
    grid->CreateGrid(0, 2);
    grid->SetDefaultRowSize(20);
    grid->AppendRows(200);

    wxButton *button = new wxButton(this, wxID_ANY, "button");

    wxFlexGridSizer *fgsMain = new wxFlexGridSizer(1, 0, 0);
    fgsMain->Add(grid, 1, wxALL, 5);
    fgsMain->Add(button, 0, wxALL, 5);
    fgsMain->AddGrowableRow(0);
    fgsMain->AddGrowableCol(0);

    SetSizer(fgsMain);

我尝试AddGrowableRow用于两行,比例设置,wxEXPAND标志。

这里有一个类似的问题,但解决方案是一种解决方法:

在对话框 (wxDialog) 中拟合大网格 (wxGrid)

(截图是用 制作的wxFormBuilder v3.8.1

4

1 回答 1

1

默认情况下,wxGrid将尝试在屏幕上显示其所有 200 行,这不会为按钮留下足够的空间。您可以调用SetInitialSize()(或在其 ctor 中创建网格时指定初始大小)来更改此设置。

与这个问题无关,但我强烈建议您使用更具可读性wxSizerFlags的 API 而不是旧的Add()重载。您也不应该以像素为单位对边框大小进行硬编码,这对于某些平台来说总是错误的,并且在高 DPI 显示器上会变得更糟(并且使用wxSizerFlags会自动处理这个问题)。

于 2019-08-09T23:16:25.393 回答