最大化MDI子窗体我的目标是让子窗体始终最大化(停靠)。问题是,即使我将MaximizeBox设置为false,最大化/调整大小按钮也会出现在MDI工具栏中并让用户调整(取消停靠)子窗体。避免这种情况的唯一方法是将ControlBox设置为false并且关闭按钮消失(这不是我想要的)。我试过使用固定的FormBorderStyle并在触发调整大小事件时最大化子窗体,但我的两种方法均无效。我缺少什么超级秘密财产,或者这是不可能的?致以最诚挚的问候并提前致谢更新我写了一个低级方法(感谢@rfresia)来处理我的子表单,它可能会帮助其他人遇到同样的问题://所有子表单都来自ChildForm//ParentMDIFormimplementation//...privatevoidShowForm(ChildFormform){//检查表单实例是否已经存在if(Forms.Any(x=>x.GetType()==form.GetType())){varf=Forms.First(x=>x.GetType()==form.GetType());f.焦点();f.WindowState=FormWindowState.Maximized;}else{//设置必要的属性(任何其他属性设置为默认值)form.MdiParent=this;form.MaximizeBox=false;form.MinimizeBox=false;form.WindowState=FormWindowState.Maximized;表格。添加(表格);form.Forms=表格;表格.显示();形式.焦点();//让它变得讨厌(否则某些表单无法正确呈现)form.WindowState=FormWindowState.Normal;form.WindowState=FormWindowState.Maximized;}}//...//ChildForm实现//...publicListForms{get;放;}受保护的重写voidOnC丢失(System.ComponentModel.CancelEventArgse){Forms.RemoveAll(x=>x.GetType()==GetType());}protectedoverridevoidOnResize(EventArgse){WindowState=FormWindowState.Maximized;您可以重写以确保您不会最小化每个子窗体的OnResize或创建一个BaseForm并从中继承所有子窗体。protectedoverridevoidOnResize(EventArgse){this.WindowState=FormWindowState.Maximized;此外,您可以使用X,y坐标,但OnResize应该足够了。把它放在子窗体构造函数中:this.WindowState=FormWindowState.Maximized;PointNewLoc=Screen.FromControl(this).WorkingArea.Location;//修改位置,以便可以轻松访问任何工具栏和任务栏。NewLoc.X+=1;NewLoc.Y+=1;this.Location=NewLoc;大小NewSize=Screen.FromControl(this).WorkingArea.Size;//修改大小,以便可以轻松访问任何工具栏和任务栏。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这个问题不容易解决,但是我偶然发现了答案,这很简单;默认情况下,将子窗体的窗口状态设置为正常。然后确保在调用Show()方法后重置子窗口的窗口状态。示例:privatevoidShowNewForm(objectsender,EventArgse){FormchildForm=newForm();childForm.MdiParent=这个;childForm.Text="窗口"+childFormNumber++;childForm.Show();childForm.WindowState=FormWindowState.Maximized;}form1obj=newform1();obj.MdiParent=MDIGracular.ActiveForm;obj.StartPosition=FormStartPosition.CenterParent;obj.WindowState=FormWindowState.Minimized;obj.Dock=DockStyle.Fill;obj.Show();对象。WindowState=FormWindowState.Maximized;这就是我克服同样问题的方法,不记得在哪里找到代码了。私有常量intWM_SYSCOMMAND=0x112;私人常量SC_MINIMIZE=0xF020;私人常量SC_MAXIMIZE=0xF030;私有常量SC_CLOSE=0xF060;私有常量SC_RESTORE=0xF120;protectedoverridevoidWndProc(refMessagemsg){if((msg.Msg==WM_SYSCOMMAND)&&(((int)msg.WParam==SC_MINIMIZE)||((int)msg.WParam==SC_MAXIMIZE)||(((int)msg.WParam==SC_CLOSE))||((int)msg.WParam==SC_RESTORE)){//什么都不做}//endifelse{base.WndProc(refmsg);}//endelse}在我的应用程序中,我发现如果将这两行放在它运行的表单加载事件中。感谢sarvjeet的基本想法。+1给你以上就是C#学习教程:最大化MDI子窗体全部内容分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——this.WindowState=FormWindowState.Minimized;这个.WindowState=FormWindowState.Maximized;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
