Jay*_*Jay 9 c# mdi mdichild maximize winforms
我正在研究一个传统的WinForms MDI应用程序,并且在使子表单按我的意愿运行时遇到一些麻烦.我的目标是让孩子的形式始终最大化(停靠).
问题是,即使我设置MaximizeBox
为false
最大化/调整大小按钮出现在MDIs工具条中,并让用户调整(取消停靠)子窗体.避免这种情况的唯一方法是设置ControlBox
为false
但然后关闭按钮消失(这不是我想要的).
我已经尝试使用一个固定的FormBorderStyle
并在调整resize事件时最大化子窗体,但我的方法都没有用.
我错过了什么超级秘密财产,还是不可能?
最好的问候和提前谢谢
我写了一个低级方法(感谢@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;
}
Run Code Online (Sandbox Code Playgroud)
use*_*568 17
这个问题不容易解决,但我偶然发现了答案,而且很简单; 默认情况下,将子窗体的windowstate设置为Normal.然后确保在调用方法后重置子窗口的windowstate Show()
.
例:
private void ShowNewForm(object sender, EventArgs e)
{
Form childForm = new Form();
childForm.MdiParent = this;
childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
}
Run Code Online (Sandbox Code Playgroud)
rfr*_*sia 14
您可以覆盖要确保不会最小化的每个子表单的OnResize.或者创建一个BaseForm并从中继承所有子表单.
protected override void OnResize(EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用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;
Run Code Online (Sandbox Code Playgroud)
我从这里得到了X,Y的代码:http: //bytes.com/topic/c-sharp/answers/278649-how-do-i-prevent-form-resizing
小智 5
form1 obj = new form1 ();
obj.MdiParent = MDIGracular.ActiveForm;
obj.StartPosition = FormStartPosition.CenterParent;
obj.WindowState = FormWindowState.Minimized;
obj.Dock = DockStyle.Fill;
obj.Show();
obj.WindowState = FormWindowState.Maximized;
Run Code Online (Sandbox Code Playgroud)