2009-08-31 34 views
20

Tôi có một UserControl trong đó bao gồm một Label (Top), một FlowLayoutPanel (Fill, dòng chảy từ trên xuống và không bọc) và một Panel (Bottom). Điều khiển người dùng tạo ra một số điều khiển, dựa trên danh sách các công cụ điều khiển và thêm chúng vào FlowLayoutPanel.C#: Làm thế nào để có được một điều khiển người dùng đúng kích thước auto tự

Làm cách nào để có được điều này UserControl để tự thay đổi kích thước chính xác để FlowLayoutPanel không có bất kỳ thanh cuộn nào? Tôi đã cố gắng sử dụng các kết hợp khác nhau của AutoSizeAutoSizeMode trên FlowLayoutPanel và chính mình là UserControl, nhưng dường như tôi không thể làm việc đó. Hoặc là tôi kết thúc với cái gì đó không thay đổi kích cỡ bản thân, hoặc nó không đủ lớn hoặc nó được hạ xuống gần như không có gì.

Trả lời

11

Cảm ơn tất cả những lời đề nghị. Giải pháp lần này dường như đặt AutoSize thành true cho cả số FlowLayoutPanel chính nó là UserControl.

Bây giờ, làm thế nào để có được biểu mẫu này sẽ chứa UserControl cũng như một số điều khiển khác, mà tôi không thể tìm ra tại thời điểm này, nhưng tôi đoán đó nên là một câu hỏi riêng ...

+0

Bạn có quản lý để giải quyết phần cuối cùng không? – Macke

+0

@Macke Điều này giống như 6 năm trước, nên tôi không biết, hehe. Có thể tìm kiếm các câu hỏi được hỏi bởi tôi vào khoảng thời gian tôi hỏi: P – Svish

5

Bạn có thể sử dụng thuộc tính Neo và Dock của UserControl để đặt tùy chọn sao cho các cạnh của điều khiển được "dán" vào một số phần khác của giao diện người dùng của bạn. Khi giao diện người dùng được thay đổi kích thước, kiểm soát của bạn sẽ theo dõi!

Nếu bạn sử dụng neo và gắn trên tất cả các điều khiển trong điều khiển người dùng của bạn và đặt chúng để gắn các cạnh của điều khiển, các điều khiển sẽ thay đổi kích thước với UserControl và bây giờ bạn có thể đặt neo/dock vào UserControl.

+3

Điều đó tôi biết, nhưng tôi không muốn kiểm soát thay đổi kích thước theo cha mẹ của họ. Tôi muốn nó phát triển hoặc thu nhỏ để nó chỉ đủ lớn để bao gồm các nội dung của 'FlowLayoutPanel' mà không có nó nhận được các thanh cuộn hoặc cắt bất kỳ nội dung nào. – Svish

0

tôi thấy rằng cách tốt nhất để giải quyết việc này là sử dụng một số mã trong trường hợp ControlAdded trên FlowLayoutPanel điều chỉnh chiều cao của bảng điều khiển (chiều cao bởi vì bạn đang sử dụng dòng chảy từ trên xuống) là:

e.Control.Location.Y + e.Control.Height + some margin 

và đặt thuộc tính Tự động hóa trên điều khiển người dùng thành True.

Bạn cũng cần thực hiện một số đề xuất gắn và neo theo câu trả lời của Mickel.

Chức năng này có thể được đóng gói trong điều khiển của riêng bạn được kế thừa từ FlowLayoutPanel và ghi đè phương thức ControlAdded.

2

Gói FlowLayoutPanel trong một TableLayoutPanel sẽ cho phép hành vi tự động kích hoạt thích hợp.

bạn UserControl sẽ trông như thế này:

UserControl 
    TableLayoutPanel (Dock-Fill) 
     Row1 : Label 
     Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize) 
     Row3 : Panel 

Một lần nữa, khi sử dụng mà UserControl, có thể bạn sẽ cần phải bọc nó trong một TableLayoutPanel sử dụng một hàng AutoSize hoặc cột.

Xem cho SplitContainers vì chúng thường ném các hành vi tự động không cân bằng.

0

Mở thêm một điều khiển cho FlowLayout bạn có thể thay đổi kích thước các điều khiển đã được bổ sung vào kích thước yêu cầu mà không nhận được các thanh cuộn cho dòng bố trí panel.l

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