You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用wxFlexGridSizer适配多行wxGrid且不隐藏下方按钮?

解决方案:用wxFlexGridSizer实现等同wxBoxSizer的布局效果

当然可以用wxFlexGridSizer实现和你给出的wxBoxSizer方案完全一致的效果,你的现有代码有两个关键疏漏,调整后就能让按钮正常显示,同时Grid保持滚动功能:

修正后的代码

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

// 明确指定1行2列的FlexGridSizer(比依赖自动列数更清晰)
wxFlexGridSizer *fgsMain = new wxFlexGridSizer(1, 2, 0, 0);
// 给Grid添加wxEXPAND标志,让它被sizer约束高度,自动显示滚动条
fgsMain->Add(grid, 1, wxALL | wxEXPAND, 5);
// 按钮添加垂直居中对齐,和BoxSizer默认效果一致
fgsMain->Add(button, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);

fgsMain->AddGrowableRow(0);
fgsMain->AddGrowableCol(0);
SetSizer(fgsMain);

问题原因分析

你的原代码之所以按钮消失,核心问题是:

  1. 缺少wxEXPAND标志:Grid的自然高度是200行×20px=4000px,远超过窗口高度。没有wxEXPAND时,wxFlexGridSizer会完全遵循Grid的自然高度,导致整个布局高度被撑到4000px,按钮被推到窗口可视区域之外。加上wxEXPAND后,Grid会被约束到sizer分配的窗口高度内,自动触发滚动条显示。
  2. 未设置按钮垂直对齐:虽然不影响显示,但wxBoxSizer水平布局时默认会让控件垂直居中,加上wxALIGN_CENTER_VERTICAL可以让FlexGridSizer的效果和BoxSizer完全一致。

你之前尝试的AddGrowableRow和比例参数是正确的方向,但因为缺少wxEXPAND,Grid没有被正确约束,所以问题没解决。

内容的提问来源于stack exchange,提问作者lumapu

火山引擎 最新活动