0

問題

多くwxGridの行 (>200) が 内に配置されていwxFlexGridSizerます。問題は、グリッドの下のボタンが消えることです。プロポーション設定wxBoxSizerを使った作品も同様です。

結果wxBoxSizer ソリューションのようになります。wxFlexGridSizerこのような状況でa を使用する方法はありますか?

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 に答える