wxGrid показывает большую пустую границу справа - PullRequest
3 голосов
/ 30 октября 2011

По умолчанию wxGrid показывает маленькую (10 пикселей?) Пустую границу справа от последнего столбца. Вызов SetMargins () не влияет на это.

Это раздражает, но я могу жить с этим.

Однако, если я установлю ширину метки строки на ноль, то пустая граница станет намного больше. Если у меня есть только одна колонка, эффект ужасен. Похоже, wxGrid оставляет место для несуществующего ярлыка.

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

Есть ли способ убрать эту границу?

enter image description here

Обратите внимание, что если я установил размер окна wxgrid более узким в конструкторе wxGrid, надеясь скрыть границу, я теперь получу горизонтальную полосу прокрутки, что тоже ужасно.

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

дает мне

enter image description here

Я только что обновился до wxWidgets v2.8.12 - проблема все еще существует.

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

Я не нашел функцию "автоматического изменения размера", которая бы помещала столбцы в пространстве сетки.В качестве обходного пути, если у вас есть только один столбец, установите его ширину

myPatGrid->SetColMinimalWidth(0, grid_width - wxSYS_VSCROLL_X - 10)

, в противном случае суммируйте ширину другого столбца и адаптируйте последний, чтобы соответствовать оставшемуся пространству (минус ширина полосы прокрутки, минус 10).

РЕДАКТИРОВАТЬ : У меня есть рабочий пример, который производит это:

grid example

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 : я преуспелудалить оставшуюся маржу с помощью:

int gridSize = 150;
int minSize = gridSize - 16; // trial & error
grid->SetMargins(0 - wxSYS_VSCROLL_X, 0);

enter image description here

0 голосов
/ 23 марта 2014

Решая что-то подобное вчера, я хотел бы внести свой вклад, следя за тем, что делает для меня работа.Возможно, это поможет кому-то еще:

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

...