2010-07-20 36 views
13

Bảng điều khiển tablelayout của tôi có một cột và ba hàng. (một được gắn vào bảng Tô màu trong mỗi ô.)Ẩn và hiển thị một ô của TableLayoutPanel

Bây giờ tôi muốn có thể ẩn/hiển thị các hàng. Tôi muốn chỉ có một hàng được hiển thị bất cứ lúc nào (dựa trên một lựa chọn người dùng của một số nút radio) và tôi muốn để có được thay đổi kích cỡ để nó lấp đầy tất cả các khu vực của TableLayoutPanel.

Tôi có thể làm như thế nào? Có suy nghĩ gì không?

Trả lời

5

Vậy tại sao bạn sử dụng một số TableLayoutPanel?

Chỉ cần đặt ba Panel s vào mẫu của bạn, điền vào tất cả mọi người với nội dung của mỗi hàng và thiết lập Dock tài sản của cả ba tấm để Fill. Đặt hai ô Visible = false và một đến true.

Nếu bạn muốn xem một bảng khác, chỉ cần hiển thị bảng điều khiển khác và ẩn hai bảng kia (dựa trên cài đặt nút radio của bạn).

18

Nếu các hàng trong TableLayoutPanel của bạn được tự động hóa thì ẩn bảng điều khiển nội dung sẽ ẩn ô nơi bảng điều khiển được đặt quá.

+0

cảm ơn, nó có thể ẩn bảng điều khiển chứ không phải ô di động .. vẫn ở đó? Tui bỏ lỡ điều gì vậy? – Bohn

+3

@BDotA, bạn có chắc chắn rằng hàng của bạn được tự động hóa không? – arbiter

+1

cũng trên trong hộp thuộc tính của TableLayoutPanel có một thuộc tính "Hàng", tôi nhấp vào nó, một hộp thoại khác mở ra. các hàng của tôi được liệt kê ở đó. có một tùy chọn nút radio CellType trong đó tôi nghĩ. vì vậy tôi đã nhấp vào từng hàng của tôi và chọn AutoSize cho nó .... đây là những gì tôi đã làm. – Bohn

3

Tôi có nhiệm vụ tương tự để làm và giải pháp của tôi là như sau:

Thêm một TableLayoutPanel để hình của bạn (hoặc bất kỳ container).

Đặt các cột và hàng của TableLayoutPanel được tính là 1 và kích thước là 100%.

Đặt đế để tô.

Đặt GrowStyle thành fixedSize.

Đặt AutoSize thành true.

Sau đó lập trình thêm tất cả ba biểu mẫu/điều khiển, một trong số đó bạn phải hiển thị tùy thuộc vào lựa chọn nút radio. Hãy chắc chắn rằng chỉ một trong số họ có thể nhìn thấy được. Điều đó có thể được thực hiện với FirstControl.Show() ban đầu; và sau đó trên mỗi sự kiện RadioButton ẩn một hiện tại và hiển thị khác. bạn có thể "nhớ" trong biến cục bộ (ví dụ: "currentVisibleControl" tham chiếu hiện có thể nhìn thấy)

lưu ý: nếu bạn muốn. Hiển thị() nhiều hơn một lần. sau đó TableLayoutPanel sẽ kích hoạt ngoại lệ rằng nó đã đầy và không thể thêm bất kỳ mục nào nữa.

P.S. Trong ví dụ của riêng tôi, tôi có TableLayoutPanel trong cửa sổ MDI và ba biểu mẫu thay thế lẫn nhau trên các nút bấm trên chúng vì vậy tôi nghĩ việc sao chép mã nguồn của tôi sẽ làm phức tạp ví dụ "bằng lời nói".

P.P.S. Từ kinh nghiệm của tôi Visual Studio hiện một số điều kỳ lạ trong chế độ thiết kế đôi khi. Tôi đã phải loại bỏ và thêm lại TableLayoutPanel để thiết lập các thuộc tính một cách chính xác và nhận được kết quả cả trong thiết kế và trong thời gian chạy. Vì vậy, nếu giá trị tự động hoặc giá trị tuyệt đối/phần trăm không được mô tả trên màn hình của nhà thiết kế thì đó có thể là vấn đề của nhà thiết kế chứ không phải của bạn. JUST DELETE IT AND RETRY.

12

tôi sẽ đề nghị thiết lập các hàng khác cao đến 0 là cách dễ nhất:

Row một:

this.tableLayoutPanel1.RowStyles[1].Height = 0; 
+5

Nó sẽ chỉ hoạt động nếu kiểu hàng là tuyệt đối. –

+2

đặt thành tuyệt đối – SlapY

6

kịch bản của tôi là tương tự.Tôi cần một TableLayoutPanel với 4 hàng, mỗi hàng cần được hiển thị theo một lựa chọn hộp kiểm. Vì vậy, thay vì chỉ hiển thị một hàng tại một thời điểm, tôi có thể hiển thị 1 - 4. Sau khi thiết kế bố cục với 1 cột và 4 hàng, các điều khiển đã được thêm và Dock được đặt thành Fill cho mỗi một. Sau đó, trong một trình xử lý sự kiện CheckedChanged duy nhất cho các hộp kiểm, tôi mã hóa như hình dưới đây. Đó là một loại phương pháp bạo lực, nhưng, Hey ... nó hoạt động!

private void checkBox_CheckedChanged(object sender, EventArgs e) 
    { 
     this.SuspendLayout(); 
     int seldCount = checkBox1.Checked ? 1 : 0; 
     seldCount += checkBox2.Checked ? 1 : 0; 
     seldCount += checkBox3.Checked ? 1 : 0; 
     seldCount += checkBox4.Checked ? 1 : 0; 

     float pcnt = 0; 
     if (seldCount == 1) 
      pcnt = 1; 
     if (seldCount == 2) 
      pcnt = 0.5f; 
     if (seldCount == 3) 
      pcnt = 0.33f; 
     if (seldCount == 4) 
      pcnt = 0.25f; 

     int newHeight = (int)(tableLayoutPanel1.Height * pcnt); 

     if (checkBox1.Checked) 
     { 
      tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Percent; 
      tableLayoutPanel1.RowStyles[0].Height = newHeight; 
     } 
     else 
     { 
      tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute; 
      tableLayoutPanel1.RowStyles[0].Height = 0; 
     } 

     if (checkBox2.Checked) 
     { 
      tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Percent; 
      tableLayoutPanel1.RowStyles[1].Height = newHeight; 
     } 
     else 
     { 
      tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute; 
      tableLayoutPanel1.RowStyles[1].Height = 0; 
     } 

     if (checkBox3.Checked) 
     { 
      tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Percent; 
      tableLayoutPanel1.RowStyles[2].Height = newHeight; 
     } 
     else 
     { 
      tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Absolute; 
      tableLayoutPanel1.RowStyles[2].Height = 0; 
     } 

     if (checkBox4.Checked) 
     { 
      tableLayoutPanel1.RowStyles[3].SizeType = SizeType.Percent; 
      tableLayoutPanel1.RowStyles[3].Height = newHeight; 
     } 
     else 
     { 
      tableLayoutPanel1.RowStyles[3].SizeType = SizeType.Absolute; 
      tableLayoutPanel1.RowStyles[3].Height = 0; 
     } 
     this.ResumeLayout(); 
    } 
7

Hãy thử điều này

TableLayoutPanel1.ColumnStyles[1].SizeType = SizeType.Absolute; 
TableLayoutPanel1.ColumnStyles[1].Width = 0; 
+0

Đó là ColumnStyles [1] nhưng phương pháp là đúng –

1

Để ẩn hàng thử này !!

tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute; 
tableLayoutPanel1.RowStyles[1].Height = 0; 
Các vấn đề liên quan