2011-09-27 17 views
9

Tôi đang tạo phần tử bảng điều khiển có thể thu gọn, về cơ bản sẽ là phần tử bảng điều khiển có phần tử nút và phần tử bảng điều khiển bên dưới nút. Nhấp vào nút khiến bảng điều khiển bên cạnh có Visible = false. Tôi muốn thay đổi kích thước bảng chứa khi bảng con được đặt thành ẩn.Thay đổi kích thước bảng điều khiển để phù hợp với các phần tử có trong các cửa sổ biểu mẫu

Tôi đã làm điều này bằng tay, bằng cách thiết lập Size tài sản là tổng các độ rộng và chiều cao của các yếu tố có thể nhìn thấy (hoặc nút hoặc nút và bảng điều khiển trẻ em.)

Tôi tò mò muốn biết mặc dù nếu có một cách để buộc thay đổi kích thước của bảng điều khiển chứa mà không cần gọi thủ công Size.

Tôi đoán tôi đang tìm kiếm nghịch đảo của thuộc tính Dock=Fill, tự động định lại kích thước các yếu tố dựa trên kích thước phần tử chứa của chúng.

Xin cảm ơn trước.

+0

Tôi nghĩ rằng đó là nó. Có lẽ bạn có thể sử dụng FlowLayoutPanel để tự động điều chỉnh các bảng bên trong khu vực khách hàng của nó, nhưng tôi nghĩ rằng những gì bạn đang làm là chính xác. – mhttk

+0

Điểm đổi kích thước của nó là gì khi không ai có thể nhìn thấy nó? –

+0

@Hans Passant: Xin lỗi, câu hỏi có thể đã được diễn đạt một cách vui vẻ. Có hai tấm. Một là một trong đó đi vô hình, và khác có chứa các nút và bảng điều khiển vô hình. Bảng điều khiển bên ngoài cần co lại khi bảng điều khiển bên trong không nhìn thấy được, nếu không nó sẽ không bị sụp đổ, nó sẽ biến mất nhưng vẫn chiếm không gian tương tự. Tôi đã cố gắng để làm một cái gì đó dọc theo dòng của những gì bạn nhìn thấy trong Visual Studio Forms Toolbox khi bạn mở rộng và sụp đổ nói rằng "Common Controls" một phần. – user420667

Trả lời

8

Làm thế nào về thực hiện:

panel1.Size = new Size(0, 0); 
panel1.AutoSize = true; 

và sau đó thay vì thay đổi tầm nhìn, làm như sau:

panel1.Controls.Remove(panel2); 

và khi bạn muốn mang nó trở lại:

panel1.Controls.Add(panel2); 

(panel1 là mặt sau)

+1

Tư duy tuyệt vời. Vì vậy, AutoSize là tài sản tôi đang tìm kiếm. Điều duy nhất là điều này nên được theo sau bởi một panel2.BringToFront() hoặc nó sẽ ném ra thứ tự docking. – user420667

4

Tôi vừa thử câu trả lời được đưa ra bởi ispiro. Bạn không cần phải loại bỏ và thêm điều khiển. Cài đặt Visible có thể hoạt động. Nó phụ thuộc vào thời điểm bạn thực hiện bố cục. Nếu panel2 thực hiện bố cục trước bảng điều khiển 1, bảng 2 sẽ không thay đổi kích thước. Để dễ dàng hơn, hãy sử dụng phụ huynh PerformLayout để thay thế.

Nó được sử dụng như thế này:

panel1.ResumeLayout(false); 
panel2.ResumeLayout(false); 
this.ResumeLayout(false); 
this.PerformLayout(); 
Các vấn đề liên quan