2013-08-19 34 views
5

Hãy GroupBox, đặt giả sử Label bên trong và sau đó đặt AutoSizeMode = GrowAndShrinkAutoSize = true.GroupBox autosize

Hai vấn đề sẽ nảy sinh:

  • Có một khoảng cách lớn giữa Label và dưới cùng của GroupBox (gần như đủ để phù hợp với Label khác lol);
  • AutoSize không tôn trọng thuộc tính GroupBox.Text.

Câu hỏi là cách làm cho GroupBox.AutoSize hoạt động bình thường? Có nghĩa là: Chiều rộng tối thiểu phải đủ để phù hợp với GroupBox.Text, không nên có khoảng trống dưới đây vì lý do không xác định (không phải là Margin, cũng không phải Padding và có vẻ khá xấu).


tôi đã cố gắng để đo chiều dài chuỗi trong OnPaint và thiết MinimumSize ngay tại đó. Nó hoạt động, nhưng tôi có nghi ngờ về điều này, như thể tôi muốn thực sự thiết lập MinimumSize sau đó - nó sẽ bị mất sau khi sơn lại.


Update, đây là ảnh chụp màn hình:

enter image description here

+0

Đó là rõ ràng rằng 'label1' Địa điểm không được' điểm (0,0) 'là? Bạn thậm chí không thử giải pháp của tôi. –

+0

Có, tôi đã thử, và không có nó không hoạt động. Tôi đã nói điều này trong câu trả lời. Muốn tôi đăng một ảnh chụp màn hình khác trong đó 'GroupBox' bị thu gọn (vì không có gì sau đó ngăn chặn' AutoSize' từ việc giảm kích thước của cha mẹ thành 0).Hãy nói cho tôi biết, tôi nên làm gì bây giờ với câu hỏi này? Tôi có một vấn đề, rõ ràng, chưa được giải quyết, đến từ Microsoft, nhưng câu hỏi của tôi đang bị giữ lại, vì vậy sẽ không có ai bận tâm trả lời nó. Đăng lại lần nữa? – Sinatr

Trả lời

1

Nó đơn giản rằng vị trí của Label của bạn là cố định tại một số điểm khác so với (0,0), hãy thử này:

label1.Location = Point.Empty; 

Bạn cũng có thể muốn thử đặt Padding trong số GroupBox thànhcủa bạncho tất cả (mặc định là 3):

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

Không hoạt động. Thiết lập này và sau đó 'GroupBox.AutoSize = true' sẽ thu gọn hộp nhóm để có chiều rộng 1 pixel hoặc một cái gì đó. Đủ thú vị, ** chiều cao ** của hộp nhóm đã thu gọn sẽ lớn hơn mức cần thiết (để vừa với ~ một nhãn 'Nhãn' trong' nhãn1'). Câu trả lời này giả sử như thế nào để khắc phục vấn đề thứ hai (với 'GroupBox.Text')? – Sinatr

+0

@Sinatr vui lòng đăng ảnh chụp màn hình của bạn. Tôi đã thử với điều này và nó co lại gần bằng kích thước của 'Label' bên trong. –

+0

Đã thêm ảnh chụp màn hình. – Sinatr

1

Bạn có thể thoát khỏi không gian màu vàng không mong muốn ở phía dưới bằng cách bắt nguồn một lớp mới từ GroupBox rằng điều chỉnh cạnh dưới một chút. Trong VB cái gì đó như ...

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

Dường như dù GroupBox điều khiển có một lớp đệm được xác định trước các loại khi phát triển sự kiểm soát nếu AutoSize = true. Đó là, một khi một điều khiển (bên trong GroupBox) nhận được trong vòng 20 pixel hoặc hơn dưới cùng của GroupBox, GroupBox bắt đầu phát triển. Điều này gây ra một 20 pixel hoặc hơn đệm từ dưới cùng của điều khiển từ dưới cùng đến dưới cùng của GroupBox (như được đánh dấu màu vàng bởi hình ảnh đính kèm của @ Sinatr).

Dựa trên quan sát của tôi, phần đệm dường như ít hơn khi phát triển Width của GroupBox.

Dù sao đi nữa, bạn có thể làm một cái gì đó giống như "đi lại" vấn đề sau:

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; 
    } 
Các vấn đề liên quan