首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wxGrid在右侧显示大的空白边框

wxGrid在右侧显示大的空白边框
EN

Stack Overflow用户
提问于 2011-10-31 02:12:28
回答 2查看 2.4K关注 0票数 3

默认情况下,wxGrid显示一个很小的( 10像素?)右侧最后一列后的空白边框。调用SetMargins()对它没有任何影响。

这很令人恼火,但我可以接受。

但是,如果我将行标签宽度设置为零,则空白边框会变得更大。如果我只有一个专栏,效果是可怕的。看起来wxGrid正在为这个不存在的标签留出空间。

代码语言:javascript
复制
myPatGrid = new wxGrid(panel,IDC_PatGrid,wxPoint(10,10),wxSize(150,300) );
myPatGrid->SetRowLabelSize(0); 
myPatGrid->CreateGrid(200,1);
myPatGrid->SetColLabelValue(0,L"Patient IDs");

有没有办法去掉这个边框?

请注意,如果我在wxgrid构造函数中将wxGrid窗口的大小设置为较窄,希望隐藏边框,我现在会得到一个水平滚动条,这也很可怕。

代码语言:javascript
复制
myPatGrid = new wxGrid(panel,IDC_PatGrid,wxPoint(10,10),wxSize(100,300) );
myPatGrid->SetRowLabelSize(0); 
myPatGrid->CreateGrid(200,1);
myPatGrid->SetColLabelValue(0,L"Patient IDs");

给了我

我刚刚升级到wxWidgets v2.8.12 -问题仍然存在。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-16 19:19:42

我没有找到一个“自动调整大小”函数来适应网格空间中的列。作为一种解决办法,如果只有一列,则将其宽度设置为

代码语言:javascript
复制
myPatGrid->SetColMinimalWidth(0, grid_width - wxSYS_VSCROLL_X - 10)

否则,将其他列的宽度相加,并调整最后一列以适应剩余空间(减去滚动条宽度,减去10)。

编辑:我有一个工作示例,它产生以下结果:

代码语言:javascript
复制
int gridSize = 150;
int minSize = gridSize - wxSYS_VSCROLL_X - 2; // scrollbar appear if higher
grid->SetRowLabelSize(0);
grid->SetColMinimalWidth(0, minSize);
grid->SetColSize(0, minSize); // needed, otherwise column will not resize
grid->ForceRefresh();
grid->SetColLabelValue(0, "COORD");

EDIT2:我成功地删除了剩余边距,如下所示:

代码语言:javascript
复制
int gridSize = 150;
int minSize = gridSize - 16; // trial & error
grid->SetMargins(0 - wxSYS_VSCROLL_X, 0);

票数 1
EN

Stack Overflow用户

发布于 2014-03-23 08:08:12

昨天解决了类似的事情,我想为下面的工作做出贡献。也许这会帮助其他人:

代码语言:javascript
复制
void RecalculateGridSize(wxGrid *grid, int cols) {
  if (grid == NULL)
    return;

  grid->AutoSizeColumns();

  float cumulative = 0, param = 0;
  for (int i = 0; i < cols; ++i)
    cumulative += grid->GetColSize(i);

  //not stretching when client size lower then calculated
  if(grid->GetClientSize().x < cumulative)
    return;

  param = (float) grid->GetClientSize().x / cumulative;

  for (int i = 0; i < cols; ++i) {
    if (i != cols - 1)
      grid->SetColSize(i, int(grid->GetColSize(i)*param) - 2); //-2 for each line per column
    else
      grid->SetColSize(i, int(grid->GetColSize(i)*param)); //leaving last column full to fill properly
    }
  }

注意:这在与OnSize()事件链接时尤其有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7946778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档