Về cơ bản tôi gặp hai vấn đề với C# .NET MDI. Bạn có thể tải về giải pháp VS2010 tái tạo lỗi here.Lỗi C# .NET MDI khi ẩn theo chương trình và hiển thị lại biểu mẫu con tối đa và khi tối đa, biểu tượng biểu mẫu con không thể thay đổi
1) Khi lập trình ẩn và hiển thị lại biểu mẫu con tối đa, nó không được tối đa hóa đúng cách một lần nữa và trở thành không được tối đa hóa hoặc ở trạng thái bình thường.
childForm = new Form();
childForm.Text = "Child Form";
childForm.MdiParent = this;
...
private void showButton_Click(object sender, EventArgs e)
{
childForm.Visible = true;
}
...
private void hideButton_Click(object sender, EventArgs e)
{
childForm.Visible = false;
}
Khi hình thức con là tối đa, sau đó programicaly ẩn và hiển thị một lần nữa, nó trở thành một cái gì đó như thế này (xin chú ý đến thanh menu - hộp điều khiển biểu mẫu trẻ xuất hiện, nhưng hình thức con không được tối đa):
Ở giai đoạn này, biểu mẫu con không thể di chuyển được. Tuy nhiên, tôi tìm thấy một giải pháp cho điều đó, chỉ đơn giản bằng cách hiển thị và ẩn một hình thức con giả, mà buộc các hình thức con thực tế để trở thành đúng cách tối đa. Nhưng điều này làm cho khu vực MDI nhấp nháy. Đã thử các phương thức không hợp lệ, làm mới, cập nhật, nhưng chúng không giúp ích gì. Có lẽ có cách giải quyết khác để khắc phục lỗi này và không làm cho khu vực MDI nhấp nháy với hình thức con giả?
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2) Khi biểu mẫu con được phóng to, biểu tượng của biểu mẫu con được hiển thị trên thanh trình đơn. Tuy nhiên, nếu bạn phải thay đổi biểu tượng trong khi biểu mẫu con được phóng to, biểu tượng trên thanh trình đơn không được làm mới (xem hình trên). Tôi tìm thấy một cách giải quyết cho điều đó quá, mà về cơ bản ẩn và hiển thị thanh trình đơn. Biểu tượng được làm mới, nhưng nó làm cho mọi thứ bên dưới thanh trình đơn nhấp nháy. Đã thử các phương thức không hợp lệ, làm mới, cập nhật, nhưng chúng không giúp ích gì. Có cách nào khác để làm cho thanh trình đơn làm mới biểu tượng của biểu mẫu con không?
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
Ngoài ra tôi nhận thấy rằng khi form cha đang ở chế độ trạng thái cửa sổ bình thường (không phải tối đa) và bạn thay đổi chiều rộng hoặc chiều cao của mẫu 1 pixel, hình thức con trở nên tối đa như nó phải được và biểu tượng của biểu mẫu con trên thanh trình đơn được làm mới đúng cách và bạn không cần cách giải quyết khác mà tôi đã mô tả ở trên. Nếu tôi thay đổi kích thước của formicaly formicaly, hình thức flickers bởi 1 pixel và tôi không thể làm điều đó, khi hình thức cha mẹ được tối đa. Có cách nào để tôi có thể gọi chức năng repaint/refresh được gọi khi bạn thay đổi kích thước biểu mẫu và làm cho biểu mẫu con trở nên tối đa đúng cách và biểu tượng trên thanh trình đơn được làm mới?
Có, tôi đã cố gắng, nhưng không có gì thay đổi. Tôi nghĩ childForm.Visible = true/false gọi những phương thức đó. – Povilas
Thực ra nó phải là một cách khác. Ẩn/Hiển thị sau đó sẽ đặt hiển thị thành false/true. –