2013-08-19 22 views
5

Bir GroupBox atın, Label içine koyun ve daha sonra AutoSizeMode = GrowAndShrink ve AutoSize = true'u ayarlayın.GroupBox autosize

İki sorun ortaya çıkacak: Label ve GroupBox altındaki (neredeyse yeterince başka Label uyacak şekilde lol) arasında büyük bir boşluk

  • yoktur;
  • AutoSize, GroupBox.Text özelliğine saygı duymaz.

Soru nasıl düzgün çalışma GroupBox.AutoSize yapmaktır? Düzgün olarak demek: minimum Genişlik GroupBox.Text'a sığacak kadar yeterli olmalı, bilinmeyen bir nedenden dolayı aşağıda boşluk olmamalıdır (Margin, ne de Padding ve oldukça çirkin görünüyor).


ben OnPaint dize uzunluğunu ölçmek ve orada MinimumSize ayarı denedim. Çalışıyor, ama bu konuda şüphelerim var, sanki MinimumSize'u daha sonra ayarlamak istiyorum - yeniden boyandıktan sonra kaybolacak.

label1.Location = Point.Empty; 

You:

enter image description here

+0

Bu 'label1' Yer değil' Noktası (0,0) 'olduğuna olduğu ortada: Her halükarda

, aşağıdaki "etrafında olsun" konusu gibi bir şey yapabilirim? Çözümümü bile denemedin. –

+0

Evet denedim ve hayır işe yaramıyor. Bunu cevabın kendisinde söyledim. GroupBox'un çöktüğü başka bir ekran görüntüsünü yayınlamamı isterim (çünkü hiçbir şey AutoSize'in ebeveyni küçültmesini engellemez).Söyle bana, şimdi bu soru ile ne yapmalıyım? Microsoft'tan gelen, açık, çözümsüz, bir sorunum var, ama sorum beklemede, bu yüzden hiç kimse bunun üzerine cevap vermek için uğraşmayacak. Tekrar tekrar gönderiyor musunuz? – Sinatr

cevap

1

Bu sizin Label yeri (0,0) dışındaki bir noktada sabittir kadar basit, bu deneyin:


Güncelleme, burada ekran görüntüsü Ayrıca GroupBox'unuzun Padding'unuolarak ayarlamayı da deneyebilirsiniz Herkes için(varsayılan 3):

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

Çalışmıyor. Bunu ayarladıktan sonra 'GroupBox.AutoSize = true', 1 piksel genişliğine sahip olacak şekilde grup kutusunu daraltacaktır. Oldukça ilginç olan, daraltılmış grup kutusunun ** yüksekliği **, ihtiyaç duyulandan daha büyük olacaktır ('label1' altındaki bir 'Label' yerine daha sığacak şekilde). Bu cevap, ikinci soruyu (GroupBox.Text ile) düzeltmeyi nasıl öngörüyor? – Sinatr

+0

@Sinatr Lütfen ekran resminizi gönderin. Bunu denedim ve neredeyse 'iç etiket' boyutuna küçülüyor. –

+0

Ekran görüntüsü eklendi. – Sinatr

1

Sen alt kenara biraz ayarlayan GroupBox gelen yeni bir sınıf türeterek altındaki istenmeyen sarı alan kurtulabilirsiniz. kontrolünü AutoSize = true eğer büyüyen zaman GroupBox kontrol türlü önceden tanımlanmış bir dolguya sahiptir sanki VB şey gibi ...

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

yılında görünüyor. Yani, bir kez (GroupBox içinde) bir kontrol, GroupBox'un altından 20 piksel veya daha fazla alana girdiğinde, GroupBox büyümeye başlar. Bu, en alttaki denetimin altından GroupBox'un altına kadar (20'de @ Sinatr'ın ekli görüntüsüyle vurgulandığı gibi) 20 piksel veya daha fazla dolguya neden olur. Benim gözlemlere dayanarak

, dolgu grup kutusunda ait Width büyüyen zaman daha az gibi görünüyor.

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; 
    }