Fitting a big grid (wxGrid) in a dialog (wxDialog)

China☆狼群 提交于 2019-12-13 05:40:02

问题


Here is my layout:

  • I have a sizer that contains a grid (with a proportion of 1) and a ok/cancel button bar

  • The all thing is in a wxDialog

Here it is:

|||||||||||||||
|             |
|    GRID     |
|             |
|             |
|             |
|||||||||||||||
| OK  CANCEL  |
|||||||||||||||

The issue is that the grid contains too many row, and over flow the screen, so in the end I don't see the top part of the dialog. Is there a way, when calling Fit() on the dialog, to limit its height ?

I have tried stuff like this: SetSizeHints(-1,-1,-1,500); and SetMaxSize(500,500) but it did not worked.

Also I have tried to do that: this->SetSize(this->GetSize().GetX(), 500);, but since the vertical scroll bar appears on the grid, it is not wide enough and a horizontal scroll bar shows up.

EDIT

In the constructor I call wxGrid(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)


回答1:


The easiest way to handle this is to use a grid of fixed size. If there are more rows than will fit, then a scroll bar will appear. You set the size you want in the constructor.

new wxGrid( this, IDC_grid, wxPoint(-1,-1),wxSize(igridxsize,igridysize));

If you want the size of the grid to adjust, e.g. when the user resizes the application window, things are a bit more complex. You need handle the window size event and change the grid size as appropriate.

Something along these lines:

myDialog::OnSize(wxSizeEvent& event);
{
wxSize dialogSize = event.GetSize();
myGrid->OnSize( wxSizeEvent(
     dialogSize.GetWidth() * 0.9, dialogSize.GetHeight() * 0.7 ));
}


来源:https://stackoverflow.com/questions/6070430/fitting-a-big-grid-wxgrid-in-a-dialog-wxdialog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!