我正在使用旧版WinForms MDI应用程序,但在使子窗体按我的方式运行时遇到了一些麻烦。
我的目标是使子窗体始终最大化(对接)。
问题是,即使我将MaximizeBox
设置为false
,“最大化/调整大小”按钮也会出现在MDI工具栏中,并让用户调整(取消)子窗体的大小。
避免这种情况的唯一方法是将ControlBox
设置为false
,但是关闭按钮消失到(那不是我想要的)。
我已经尝试过使用固定的FormBorderStyle
并在触发resize事件时最大化子窗体,但是我的方法均无效。
我是否错过了任何 super secret 属性(property),或者这根本不可能吗?
最好的问候和在此先感谢
更新
我写了一个简单的方法(感谢@rfresia)来处理我的 child 表单,它可能会帮助遇到相同问题的其他人:
//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;
}
最佳答案
您可以覆盖要确保不会最小化的每个子窗体的OnResize。或创建一个BaseForm并从中继承所有子窗体。
protected override void OnResize(EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
}
另外,您可以使用X,y坐标,但是OnResize应该足够了。将其放在子窗体构造函数中:
this.WindowState = FormWindowState.Maximized;
Point NewLoc = Screen.FromControl(this).WorkingArea.Location;
//Modifiy the location so any toolbars & taskbar can be easily accessed.
NewLoc.X += 1;
NewLoc.Y += 1;
this.Location = NewLoc;
Size NewSize = Screen.FromControl(this).WorkingArea.Size;
//Modifiy the size so any toolbars & taskbar can be easily accessed.
NewSize.Height -= 1;
NewSize.Width -= 1;
this.Size = NewSize;
this.MinimumSize = this.Size;
this.MaximumSize = this.MinimumSize;
我从这里获得了X,Y的代码:
http://bytes.com/topic/c-sharp/answers/278649-how-do-i-prevent-form-resizing