我正在开发旧版 WinForms MDI 应用程序,并且在使子表单按我想要的方式运行时遇到了一些麻烦。我的目标是让子窗体始终最大化(停靠)。
问题是,即使我设置MaximizeBox
为false
最大化/调整大小按钮出现在 MDI 工具条中并让用户调整(取消停靠)子窗体的大小。避免这种情况的唯一方法是设置ControlBox
为false
,然后关闭按钮消失(这不是我想要的)。
我已经尝试在FormBorderStyle
触发调整大小事件时使用固定并最大化子表单,但我的方法都没有奏效。
有没有我错过的超级秘密财产,或者这是不可能的?
提前致以最诚挚的问候和感谢
更新
我写了一个低俗的方法(感谢@rfresia)来处理我的孩子表单,它可能会帮助遇到同样问题的其他人:
//All child forms derive from ChildForm
//Parent MDI Form implementation
//...
private void ShowForm(ChildForm form)
{
//Check if an instance of the form already exists
if (Forms.Any(x => x.GetType() == form.GetType()))
{
var f = Forms.First(x => x.GetType() == form.GetType());
f.Focus();
f.WindowState = FormWindowState.Maximized;
}
else
{
//Set the necessary properties (any other properties are set to default values)
form.MdiParent = this;
form.MaximizeBox = false;
form.MinimizeBox = false;
form.WindowState = FormWindowState.Maximized;
Forms.Add(form);
form.Forms = Forms;
form.Show();
form.Focus();
//Lets make it nasty (some forms aren't rendered properly otherwise)
form.WindowState = FormWindowState.Normal;
form.WindowState = FormWindowState.Maximized;
}
}
//...
//ChildForm implementation
//...
public List<Form> Forms { get; set; }
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
Forms.RemoveAll(x => x.GetType() == GetType());
}
protected override void OnResize(EventArgs e)
{
WindowState = FormWindowState.Maximized;
}