2012-06-15 36 views
10

Vấn đề này được chứng minh tốt hơn giải thích, vì vậy tôi đã thiết lập một dự án git repo được sử dụng để xem sự cố đang hoạt động.Điều khiển được đặt trong TableLayout không tự động kích thước nhỏ hơn kích thước của chúng

Tôi có một dự án mà tôi đã thêm điều khiển ComboBox (comboField) vào điều khiển TableLayout (tableLayoutPanel1). Tôi đã đặt thuộc tính Dock của ComboBox thành Fill để nó điền vào ô của điều khiển TableLayout mà nó đã được đặt vào. Tôi cũng đã đặt thuộc tính Dock của điều khiển TableLayout thành Fill để nó điền vào Biểu mẫu nó đã được đặt trên. Chiều rộng của ComboBox hiện tại là 193 pixel.

Khi tôi chạy biểu mẫu và tăng chiều rộng của biểu mẫu, kích thước của ComboBox tăng, như mong đợi. Khi tôi giảm kích thước của biểu mẫu, ComboBox giảm kích thước cho đến khi nó đạt đến kích thước ban đầu (193 pixel). Tại thời điểm đó, chiều rộng của ComboBox sẽ không giảm thêm nữa, dẫn đến phía bên phải của điều khiển bị cắt bớt. Điều này trái với những gì tôi mong đợi: chiều rộng của ComboBox sẽ giảm xuống 0, cho rằng không có MinimumSize nào được chỉ định. Không có MinimumSize được chỉ định cho bất kỳ điều khiển nào khác trên biểu mẫu, chẳng hạn như điều khiển TableLayout.

Trong trường hợp có liên quan, chiều rộng của cột đầu tiên của TableLayout được đặt thành kích thước Absolute là 100 pixel, trong khi chiều rộng của cột thứ hai của TableLayout đã được đặt thành AutoSize.

Bất cứ ai có thể làm sáng tỏ lý do tại sao biểu mẫu này hoạt động trái với mong đợi của tôi và tư vấn về cách tôi có thể làm việc này theo cách mình muốn? Bất kì sự trợ giúp nào đều được đánh giá cao.

Trả lời

4

Tablelayoutpanel dường như lưu trữ kích thước ban đầu của các điều khiển và không bao giờ làm cho chúng nhỏ hơn bất kể việc lắp ghép, neo hoặc bất kỳ giá trị nào khác như AutoSizeMode.GrowAndShrink. Trong thiết kế, kích thước của điều khiển dock sẽ luôn luôn được lưu trữ, vì vậy phương pháp đơn giản nhất tôi đã tìm được là thiết lập chiều rộng là 0 sau initializecomponent (vì điều khiển được gắn, nó sẽ không thực sự thay đổi kích thước của combobox, nhưng nó sẽ cho phép tablelayoutpanel làm cho nó nhỏ như chiều rộng đã đặt)

 InitializeComponent(); 
     comboField.Width = 0; 
+1

này hoạt động! Cảm ơn! https://github.com/IAmAI/TableLayoutSizingIssueTest/tree/fix-Me.Name –

9

Tôi đã tải xuống mã của bạn và thực hiện thay đổi này. nó hoạt động ngay bây giờ -

Do SizeType cột thứ 2 để phần trăm và làm cho nó 100%

Designer Mã số: -

this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 

enter image description here

+1

Điều này cũng hoạt động. Cảm ơn, Andshuman. https://github.com/IAmAI/TableLayoutSizingIssueTest/tree/fix-Angshuman –

+1

Cool..thanks !! Nếu kích thước của cột/hàng được đặt thành Phần trăm, kích thước của cột/hàng được xác định bởi kích thước của TableLayoutPanel. –

Các vấn đề liên quan