2013-08-19 16 views
5

GroupBoxと入力し、Labelと入力してからAutoSizeMode = GrowAndShrinkAutoSize = trueと設定します。GroupBoxオートサイズ

2つの問題が発生します:

  • Labelと(笑別Labelに合わせて、ほぼ十分な)GroupBoxの底部との間大きなギャップがあります。
  • AutoSizeは、GroupBox.Textプロパティを尊重しません。

質問GroupBox.AutoSizeを正しく動作させる方法?適切には、最小幅はGroupBox.Textに足りるはずです。理由は不明です(これはMarginではなく、Paddingではありません)。


私はOnPaintで文字列の長さを測定し、右がMinimumSizeを設定しようとしました。実際にはMinimumSizeに設定したいと思っているかのように、これについては疑問があります。再描画後に失われます。

label1.Location = Point.Empty; 

あなたを:

enter image description here

+0

それは 'label1'場所は' 'ポイント(0,0)ではないことは明らかですか?あなたは私の解決策を試してみませんでした。 –

+0

はい、試してみましたが、うまくいきません。私は答えの中でこれを語った。 'GroupBox'が折りたたまれた別のスクリーンショットを投稿したいのです(なぜなら、' AutoSize'が親のサイズをゼロに減らさないためです)。私に教えてください。私は今この質問で何をすべきですか?マイクロソフトからの問題は、明らかに未解決であるが、私の質問は保留になっているので、誰もそれに戸惑うことはないだろう。もう一度やり直す? – Sinatr

答えて

1

それはあなたのLabelの場所が(0,0)以外のいくつかの点で固定されていることを簡単です、これを試してみてください。


アップデートは、ここにスクリーンショットですGroupBoxPaddingをに設定してみてください。すべてのための(デフォルトは3):

groupBox1.Padding = new Padding(0); 
+0

動作しません。これを設定してから 'GroupBox.AutoSize = true'を設定すると、グループボックスが1ピクセル幅になるように縮小されます。興味深いことに、折りたたまれたグループボックスの高さ**は必要以上に大きくなります(もう1つは 'label1'の下の' Label'に収まるようになります)。この答えが2番目の問題を(GroupBox.Text'で)修正する方法を教えてください。 – Sinatr

+0

@Sinatrスクリーンショットを投稿してください。私はこれを試して、内側の 'Label'のサイズにほぼ縮小します。 –

+0

スクリーンショットを追加しました。 – Sinatr

1

あなたは下端を少し調整のGroupBoxから新しいクラスを派生させて下部にある不要な黄色のスペースを取り除くことができます。 AutoSize = true場合、コントロールを成長させる際GroupBox制御はある種の事前に定義されたパディングを持っているかのようにのような...

Public Class BetterGroupBox 
    Inherits GroupBox 

    Public Overrides Function GetPreferredSize(ByVal proposedSize As Size) As Size 
     Dim ns = MyBase.GetPreferredSize(proposedSize) 
     Return New Size(ns.Width, ns.Height - 15) 
    End Function 

End Class 
0

VBの何かでそれはそうです。つまり、GroupBox内のコントロールがGroupBoxの下部の20ピクセル以内になると、GroupBoxが成長を開始します。これにより、一番下のコントロールの下部からGroupBoxの下部に20ピクセルほどのパディングが生じます(@ Sinatrの添付画像で黄色で強調表示されます)。

GroupBoxのWidthを成長させると、私の観察に基づいて、埋め込みが少なくなるようです。いずれにしても

、あなたは以下の問題を「動き回る」のような何かを行うことができます:

public void MyFunction() 
    { 
     groupBox1.AutoSize = true; 

     // Do stuff (e.g., add controls to GroupBox)... 

     // Once all controls have been added to the GroupBox... 
     groupBox1.AutoSize = false; 

     // Add optional padding here if desired. 
     groupBox1.Height = myBottomMostControl.Bottom; 
    } 
関連する問題