01/10/2018, 17:29

Lỗi khi add một Form vào Panel trong C#

Góc Kinh Nghiệm giả sử chúng ta đang có các đối tượng như sau: Một Form chính tên là FrmMain Một Panel tên là pnlContain (thuộc FrmMain ) Một Button tên btnAddForm (thuộc FrmMain ) Một Form tên FrmEmployeeInfo (một form riêng biệt được tạo từ Visual Studio và ngang cấp với ...

Góc Kinh Nghiệm giả sử chúng ta đang có các đối tượng như sau:

  • Một Form chính tên là FrmMain
  • Một Panel tên là pnlContain (thuộc FrmMain)
  • Một Button tên btnAddForm (thuộc FrmMain)
  • Một Form tên FrmEmployeeInfo (một form riêng biệt được tạo từ Visual Studio và ngang cấp với FrmMain)

Khi Góc Kinh Nghiệm nhấtn vào nút btnAddForm thì FrmEmployeeInfo sẽ được add vào trong pnlContain, sự k iện click của nút btnAddForm gọi đến hàm AddForm() để xử lý, code được viết như sau:

public void AddForm()
{
   // Xóa hết controls đang tồn tại trong pnlContain (nếu có)
   this.pnlContain.Controls.Clear();

   FrmEmployeeInfo frmChild = new FrmEmployeeInfo();
   // Gắn vào panel
   this.pnlContain.Controls.Add(frmChild);

   // Hiển thị form
   frmChild .Show();
}

Khi nhấn F5 chạy chương trình, sau đó nhấn nút btnAddForm thì sẽ xuất hiện lỗi như sau:

"Top-level control cannot be added to a control"

Giải thích:

Lỗi xuất hiện là bởi vì FrmEmployeeInfo là một Form được kết thừa từ class tên System.Windows.Forms.Form vì thế có Top-level bằng true. Vì vậy bạn phải thiết lập thuộc tính Top-level = false trước khi add FrmEmployeeInfo vào pnlContain. Đoạn code được viết lại như sau:

public void AddForm()
{
   // Xóa hết controls đang tồn tại trong pnlContain (nếu có)
   this.pnlContain.Controls.Clear();

   FrmEmployeeInfo frmChild = new FrmEmployeeInfo();
   frmChild.TopLevel= false; 

   // Gắn vào panel
   this.pnlContain.Controls.Add(frmChild);

   // Hiển thị form
   frmChild .Show();
}

Giờ thì build lại chương trình và nhấn F5, nhấn vào nút btnAddForm chúng ta sẽ thấy form FrmEmployeeInfo được add vào pnlContain

Góc Kinh Nghiệm chúc các bạn thành công!  :lol:


0