Nếu bạn tạo một bảng trên một biểu mẫu và đặt nó vào Dock = Top và thả một bảng khác và đặt Dock = Fill, nó có thể điền vào toàn bộ biểu mẫu, bỏ qua bảng đầu tiên. Thay đổi thứ tự tab không làm gì cả.
Nếu bạn tạo một bảng trên một biểu mẫu và đặt nó vào Dock = Top và thả một bảng khác và đặt Dock = Fill, nó có thể điền vào toàn bộ biểu mẫu, bỏ qua bảng đầu tiên. Thay đổi thứ tự tab không làm gì cả.
Câu trả lời:
Bố trí lắp ghép phụ thuộc vào thứ tự điều khiển anh chị em. Các điều khiển được neo "nút lên", vì vậy điều khiển cuối cùng trong bộ sưu tập được neo trước . Một điều khiển được neo chỉ đưa vào bố trí của anh chị em được neo trước đó . Do đó, điều khiển với Dock = Fill phải là đầu tiên (trên cùng) theo thứ tự anh chị em, nếu bạn muốn nó đưa các điều khiển được neo khác vào tài khoản. Nếu nó không phải là điều khiển đầu tiên, các điều khiển trước đó sẽ chồng lấp nó.
Điều này có thể gây nhầm lẫn bởi vì thứ tự anh chị em không nhất thiết phải giống với thứ tự trực quan và thứ tự anh chị em không phải lúc nào cũng rõ ràng từ quan điểm thiết kế.
Các tài liệu phác thảo cửa sổ (View -> Windows khác -> Tài liệu đề cương) đưa ra một cây-view hữu ích trong hệ thống phân cấp quản lý và trật tự, và cho phép bạn thay đổi thứ tự của anh chị em điều khiển.
Bạn cũng có thể thay đổi thứ tự anh chị em trực tiếp trong trình thiết kế theo menu ngữ cảnh -> Đưa ra phía trước / Gửi về phía sau, điều này di chuyển điều khiển thành đầu tiên hoặc cuối cùng của anh chị em. Các nhãn menu này có thể hơi khó hiểu vì hiệu ứng thực tế phụ thuộc vào mô hình bố trí.
Với các điều khiển được định vị cố định, vị trí 2D không phụ thuộc vào thứ tự anh chị em, nhưng khi các điều khiển bị chồng chéo, điều khiển sớm nhất theo thứ tự sẽ là "trên cùng", ẩn một phần của anh chị em sau đó theo thứ tự. Trong bối cảnh này Đưa ra phía trước / Gửi để trở lại có ý nghĩa.
Bên trong bảng điều khiển dòng hoặc bảng bố trí, thứ tự tạo xác định thứ tự trực quan của các điều khiển. Không có điều khiển chồng chéo. Vì vậy, đưa ra phía trước / gửi trở lại thực sự có nghĩa là thực hiện đầu tiên hoặc cuối cùng theo thứ tự kiểm soát.
Với cách bố trí được neo, việc đưa ra phía trước / gửi về phía sau có thể còn khó hiểu hơn vì nó xác định thứ tự được tính theo thứ tự, do đó, "đưa ra phía trước" trên điều khiển được gắn vào sẽ đặt điều khiển ở giữa cha mẹ , đưa tất cả các điều khiển cạnh neo vào tài khoản.
Nhấp chuột phải vào bảng điều khiển với Dock = Fill và nhấp vào 'Đưa ra phía trước'.
Điều này làm cho điều khiển này được tạo sau cùng, có tính đến cài đặt Dock trên các điều khiển khác trong cùng một vùng chứa.
Một tùy chọn khác, có khả năng sạch hơn là sử dụng điều khiển TableLayout. Thiết lập một hàng có chiều cao mong muốn cho thanh công cụ trên cùng của bạn và một hàng khác để lấp đầy 100% cho phần dưới cùng của bạn. Đặt cả hai bảng bên trong thành Fill, và bạn đã hoàn thành.
(Tuy nhiên, TableLayout sẽ làm quen với một số.)
Tôi đã có cùng một vấn đề và tôi đã giải quyết nó.
Nếu bạn có một thùng chứa với DockStyle.Fill
những người khác thì cũng nên có DockStyle nhưng Top hoặc bất cứ thứ gì bạn muốn.
Điều quan trọng là thêm điều khiển với DockStyle.Fill
đầu tiên trong Điều khiển sau đó là điều khiển khác.
Thí dụ:
ComboBox cb = new ComboBox();
cb.Dock = DockStyle.Top;
GridView gv = new GridView();
gv.Dock = DockStyle.Fill;
Controls.Add(gv); // this is okay
Controls.Add(cb);
nhưng nếu chúng ta đặt cb trước
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.
Nếu bạn không muốn thay đổi thứ tự của các phần tử bên trong mã, bạn có thể sử dụng phương thức Container.Controls.SetChild Index () với Container là ví dụ Biểu mẫu, Bảng điều khiển, v.v. bạn muốn thêm điều khiển của mình vào.
Thí dụ:
//Container ------------------------------------
Panel Container = new Panel();
//Top-Docked Element ---------------------------
ButtonArea = new FlowLayoutPanel();
Container.Controls.Add(ButtonArea);
Container.Controls.SetChildIndex(ButtonArea, 1);
ButtonArea.Dock = DockStyle.Top;
//Fill-Docked Element --------------------------
box = new RichTextBox();
Container.Controls.Add(box);
Container.Controls.SetChildIndex(box, 0); //setting this to 0 does the trick
box.Dock = DockStyle.Fill;
JacquesB có ý tưởng với đề cương tài liệu nhưng hệ thống phân cấp không giải quyết được vấn đề của tôi. Các điều khiển của tôi không theo kiểu phân cấp mà chúng chỉ được liệt kê với cùng cha mẹ.
Tôi đã học được rằng nếu bạn thay đổi thứ tự, nó sẽ sửa theo cách bạn muốn.
Các điều khiển ở dưới cùng của danh sách sẽ chồng lấp các điều khiển ở trên cùng của nó trong cửa sổ Tài liệu phác thảo. Trong trường hợp của bạn, bạn sẽ chắc chắn rằng bảng đầu tiên ở dưới bảng thứ hai và vv.
Đây là một mẹo làm việc cho tôi ..
Đặt mục trên cùng và gắn nó lên trên.
Đặt một Splitter và cũng gắn nó lên trên cùng, sau đó đặt nó bị vô hiệu hóa (trừ khi bạn muốn thay đổi kích thước trên cùng).
Sau đó, đặt đối tượng Fill và đặt Docking thành Fill. Đối tượng sẽ ở dưới bộ chia.
Tôi gặp vấn đề tương tự. Của tôi là với việc thêm các điều khiển mới / tùy chỉnh bên dưới dải menu trong thời gian chạy. Vấn đề là các điều khiển khi cập cảng, quyết định cập bến từ đầu biểu mẫu và hoàn toàn bỏ qua dải menu hoàn toàn, rất khó chịu nếu bạn hỏi tôi. Vì điều này phải được thực hiện linh hoạt với mã và không trong chế độ thiết kế, điều này trở nên cực kỳ bực bội. Cách đơn giản nhất mà tôi tìm thấy là tạo một bảng điều khiển trong chế độ thiết kế và đặt bên dưới dải menu. Từ đó bạn chỉ cần thêm / xóa các điều khiển vào bảng điều khiển và bạn có thể gắn nó trong thời gian chạy. Không cần phải lộn xộn với tất cả các điều khiển của bạn trên biểu mẫu của bạn mà không thực sự cần thay đổi, quá nhiều công việc tùy thuộc vào những gì bạn thực sự cần làm.
object.dock = Fill
Panel.Controls.Add(object)
Tôi biết đây là một bài viết cũ nhưng tôi phát hiện ra một cái gì đó hữu ích. Để điều chỉnh thứ tự kiểm soát anh chị em theo chương trình cho (các) điều khiển được tạo động, bạn có thể thực hiện một số thứ như:
parentForm.Controls.SetChildIndex (myPanel, 0)
Trong trường hợp của tôi, tôi đã làm điều này để di chuyển bảng điều khiển Dock / Fill thành điều khiển đầu tiên trong biểu mẫu của mình để nó không trùng lặp với một điều khiển được gắn khác được đặt thành Dock / Top (một dải menu).