2

C#および.NET Compact Framework2.0SP2を使用してWindowsMo ​​bile5.0以降用のアプリを開発しています。

内部に2つのパネル(upperPanelとbottomPanel)を持つWinFormがあります。upperPanelが常にフォームの高さの2/3を埋め、bottomPanelがフォームの高さの1/3を埋めるようにします。両方のパネルがフォームの幅を完全に埋めます。

私はこれを使用しました:

upperPanel.Dock = Fill;
bottomPanel.Dock = Bottom;

ただし、upperPanelはフォームに完全に入力します。

これどうやってするの?さまざまなフォームファクターランドスケープモードまたはプロトレイトモードで同じGUIが必要です。

ありがとうございました。

4

8 に答える 8

9

あなたがする必要があるのは、最初に下部パネルを置き、そのDockプロパティをに設定することBottomです。次に、パネルの高さをフォームの高さの1/3に設定します。最後に、2番目のパネルを追加し、そのDockプロパティをに設定しますFill。ここで重要なのは、最後に追加する残りの領域を埋めるコントロールを追加することです。または、Visual Studioの[最前面に移動]コマンドと[最背面に移動]コマンドを試して、デザイナーに協力してもらうこともできます。

OnSizeChangedフォームのイベントをフックし、レイアウトの変更に対応するために下部パネルの高さを再設定する必要がある場合もあります。コンパクトフレームワークプログラミングをしてから少し経ちましたので、よくわかりません。

于 2009-11-04T18:59:48.150 に答える
1

両方のパネルを「固定されていない」に設定します。つまり、Dock-Valueを削除し、Anchorプロパティをクリアします。次に、コントロールを移動して、希望するサイズになるようにします。

その後、フォームのサイズを変更すると、比較的サイズを変更する必要があります。

編集
おっと、それを試してみて、それが機能しないことを確認してください。これを、コントロールをウィンドウ内の中央に自動的に保持するソリューションと混同しました...

Resizeそうですね、フォームのサイズを変更した後、フォームのイベントのハンドラーを作成し、コントロールを手動で調整する必要があると思います。

于 2009-11-04T11:37:36.843 に答える
1

[ツール]、[その他のウィンドウ]、[ドキュメントのアウトライン]に移動します。2つのパネルを見つけて、それらの順序を入れ替えます。DockStyle.Fill正しくドッキングするには、最初に実行する必要のあるコントロール。(または最後に..それがどれであるかはわかりませんが、それはそのうちの1つです:p)

ただし、これでは常に1/3と2/3の問題が解決されるわけではありません...下部パネルの高さが固定されるためです(私が間違っていない限り)。TableLayoutPanel多分これをサポートしていると思います...

更新:コメントに記載されているように、そのパネルはコンパクトフレームワークには存在しません。したがって、この問題の最も簡単な解決策はドッキングを使用しようとすることだと思いますが、フォームのサイズが変更されるたびに下部パネルの高さを更新します。

于 2009-11-04T11:45:22.057 に答える
1

upperPanelを右クリックし、[前面に移動]を選択します。しかし、これであなたが望む結果が得られるとは思いません。サイズを変更すると、下部のパネルは同じ高さのままになり、上部のパネルはフォームを埋めるために伸びます。

ドッキング設定を使用して、このコードでトリックを実行する可能性があります。

    protected override void OnSizeChanged(EventArgs e)
    {
        base.OnSizeChanged(e);

        this.bottomPanel.Height = Convert.ToInt32((double)this.Height / 3.0);
    }
于 2009-11-04T14:52:13.587 に答える
0

これを完全に機能させるには、フォームのResizeイベントにコードを追加する必要があります。これにより、相対的なサイズが具体的に計算され、サイズ変更後にコントロールが正しい場所に配置されます。

精度が低下する心配がなく、フォームがあまり動かない場合は、比較的スマートなアンカーを使用することでこれを回避できます。基本的に、「栽培者」を選択する必要があります(フォームの一部が大きくなるほど、フォームは大きくなります)。このシナリオでは、おそらく上部を上部に固定します。左| 右と下の部分から上へ| 左| 右| 下。これは、フォームが展開されると、フォームの下部が大きくなることを意味します。ほとんどの場合、これは許容範囲です。Resizeイベントといくつかのコードを使用しない場合。

于 2009-11-30T18:20:00.460 に答える
0

これを行う最も簡単な方法は、パネルをネストすることです。上部下部のパネルを設定して塗りつぶすだけです。次に、それらのパネル内のパネルを使用して同じことを行います。私がそこで抱えていた唯一の問題は、データグリッドのサイズ変更です。これはとにかく常に苦痛です。その場合、フォームのサイズ変更イベントでデータグリッドコントロールのサイズを変更するには、コードを使用する必要があります。

于 2010-05-05T17:50:59.480 に答える
0

@jasonhの回答にポイントを付け加えたいと思います。

フォームの2/3を占めるパネルの場合、パネルのAutoScrollプロパティをtrueに設定する必要があります。

これにより、コントロールサイズがユーザーの可視性を超えたときにパネルにスクロールを表示できるようになり、フォームの高さの1/3である小さいパネルの可視性も確保されます。

于 2011-12-29T05:50:03.177 に答える
0

ネストされたパネルを使用し、停泊とドッキングのプロパティをいくつか設定することで、必要なデザインを取得できます。次の手順に従います。1)フォームを追加し、その上にPanel1を配置します。Dockプロパティを「Fill」に設定し、ResizeModeを「Grow&Shrink」に設定します。2)2番目のpanel2を追加し、そのDockプロパティを「Bottom」に設定し、Heightを設定し、Anchorプロパティを「Top、Left」に設定します。3)3番目のパネルを追加し、そのDockプロパティを「None」に設定し、Heightを設定し、Anchorプロパティを「Top、Bottom、Left、Right」に設定します。

保存してコンパイルします。これで、すべてのパネルは、サイズ変更によって相対的な位置を維持します。

于 2014-01-23T11:35:28.023 に答える