我正在开发一个遗留的 WinForms MDI 应用程序,并且在使子窗体按我想要的方式运行时遇到一些问题。
我的目标是拥有儿童形式always最大化(停靠)。
问题是,即使我设置MaximizeBox
to false
最大化/调整大小按钮出现在 MDI 工具条中,让用户调整(取消停靠)子窗体的大小。
避免这种情况的唯一方法是设置ControlBox
to false
但随后关闭按钮消失(这不是我想要的)。
我已经尝试过使用固定的FormBorderStyle
并在触发调整大小事件时最大化子窗体,但我的方法都不起作用。
我是否错过了任何超级秘密财产,或者这是不可能的?
预先致以最诚挚的问候和感谢
Update
我写了一个简单的方法(感谢@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;
}
这个问题并不好解决,但是我无意中找到了答案,而且很简单;默认情况下,将子窗体的窗口状态设置为“正常”。然后确保重置子窗口的窗口状态AFTER你打电话给Show()
method.
Example:
private void ShowNewForm(object sender, EventArgs e)
{
Form childForm = new Form();
childForm.MdiParent = this;
childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)