2016-05-15 4 views
0

私は他のコントロールを持つタブコントロールを持つウィンドウフォームを持っています。Control.Bounds.Bounds.Bottomにサイズを変更すると予期しない結果が発生する

コントロールの量は動的であり、私はこのコードの一部持ってちょうどいいサイズにフォームをしたいので:これはちょうどその高さは、下部に2つのコントロールをトリミングフォームの幅を設定しながら

 int w = 0; 
     int h = 0; 
     foreach (Control x in Tab_Control.Controls) 
     { 
      if (x.Bounds.Right > w) w = x.Bounds.Right; 
      if (x.Bounds.Bottom > h) h = x.Bounds.Bottom; 
     } 
     Tab_Control.Size = new Size(w, h); 
     Form1.Size = new Size(w, h); 

を。私は位置が親コントロールに相対的であるかもしれないと思ったが、実際の座標を得るために "PointToScreen(Point.Empty)"を使用した場合、その違いが21ピクセルになることがわかった。

私はなぜフォームの高さをhに設定するのが短すぎるのだろうと思っています。

答えて

2

代わりにClientSizeプロパティを設定してください。

さらにコードを書くことはまったくありません。フォームのAutoSizeプロパティをTrue、AutoSizeModeをGrowAndShrinkに設定します。コントロールとボーダーの間に適切なスペースがあるように、下部と右側のコントロールにMarginプロパティを設定することをお勧めします。

+0

ClientSizeは機能しましたが、 "AutSize"をTrueに設定し、 "AutoSizeMode"を "GrowAndShrink"に設定すると、何らかの理由でボトムコントロール(余白があります)がトリミングされます。 – mathgenius

+0

Nvm、それはタブコントロールがあり、それ自体がAutoSizeプロパティを持たないので動作しません。 – mathgenius

3

この矛盾は、フォームのタイトルバーのサイズによるものです。

コントロールで必要なサイズを正しく計算していますが、タイトルバーを含むウィンドウ全体のサイズをその高さに設定しています。

タイトルバーの高さを計算するサイズに追加する必要があります。それは矛盾のすべてをカバーしていない場合は、System.Windows.Forms.SystemInformation

CaptionHeightプロパティからタイトルバーの高さを得ることができます

は、あなたのアカウントにそれを取る必要があるかどうかを確認するために、フォームの境界線の太さを見て同様に

+0

ありがとうございました、少し助けましたが、いくつかの切り抜きが発生しています。それはまだ不足しています。 – mathgenius

+0

@ mathgenius - おそらく境界の太さも考慮する必要があります。 SystemInformationクラスの数値を確認します。 – ChrisF

+0

これまでにCaptionHeightを追加すると、BorderSize.HeightとBorder3DSize.Heightは完全には役に立ちませんでした。良い20ピクセルがありません。私は "SystemInformation"のすべてのメンバーを見たが、私の場合に適用できる他のものは見なかった。 – mathgenius

関連する問題