FormWindowState.Maximized的陷阱

MDI父窗体下面有很多子窗体。子窗体打开时都是以FormWindowState.Maximized的属性打开的,但是结果部分如意,部分奇怪。

先贴上单实例的代码:

 static TestForm _singleTon;
 public static void ShowSingleTon(FormWindowState windowState = FormWindowState.Maximized, Form parent = null)
 {
     if (_singleTon == null || _singleTon.IsDisposed)
         _singleTon = new ProductSetting(count);
     if (parent != null)//设置父窗口,以及对代理赋值
     {
         _singleTon.MdiParent = parent;
     }
     if (_singleTon.WindowState != windowState) _singleTon.WindowState = windowState;
     if (Setting.SetFrontWindow != null && _singleTon.IsHandleCreated) Setting.SetFrontWindow(_singleTon.Handle);
     _singleTon.Show();
 }

如此,调用TestForm.ShowSingleTon就能显示出单实例的窗口了。

但是同样的单实例实现逻辑,几个窗口最大化的效果却不一样,一部分的确是最大化的,另一部分子窗口是初始化的大小,虽然最小化和关闭的按钮是正常。

对比几个窗口的其余的代码,发现出问题的窗口在窗口设计界面,就设置了FormWindowState.Maximized

而正常显示的窗口这里是默认Normal值。

将窗口的maximized还原成Normal之后,问题解决了。

这里只能猜测,WindowState的属性值在修改时会触发窗口Size的重新计算,在需要的时候修改这个值,可以得到正确的结果。

症结点很坑爹。以后要更注意。

时间: 2024-10-12 03:27:52

FormWindowState.Maximized的陷阱的相关文章

自定义窗体的最大化,最小化,关闭功能

namespace 自定义窗体的最大化_最小化和关闭按钮 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disp

winform 之MDI容器

MDI是指将多控件窗体在同一窗体中打开 1.设置:属性中IsMDIContainer:true; 窗体变为灰色成为MDI窗体容器 2.MDI中一般采用菜单作为打开方式 3.子级窗体在MDI中打开,需先设置位于MDI窗体中 例: Form2 f2 = new Form2(); f2.MdiParent = this; f2.Show(); 4.窗口打开最大化 对象.WindowState=FormwindowState.Maximized 5.父级Panel容器中打开,为隐藏窗口还原按钮 对象.P

Winform MDI窗体容器、权限、简单通讯

MDI窗体容器: 一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体 在内部的窗体不管怎么调整,是无法跳出其父级窗体容器的 注:如果想让内部窗体一直最大化并且不要其显示最大化最小化按钮,可将其FormBorderStyle设置为None,Win7系统另外需要将此窗体放入一个Panel容器中 private void 销售ToolStripMenuItem_Click(object

另一种在WINFORM中使用XNA的方法

之前在写化学分子模型制作程序的时候,使用一种方法,将WINFORM控件嵌入到XNA窗体中,从而实现了即使用WINFORM窗体控件又使用XNA.最近在写另一个物理运动学课件制作程序,同样使用XNA,但从另一个角度实现了WINFORM控件和XNA共存,并且在编码上更简单一些. 一.创建XNA工程并添加窗体 向工程添加窗体MainForm,并修改GAME1为MainGame.我们把XNA内容绘制到MainForm上,其实绘制到任何有句柄的控件都可以,即使我们绘制到桌面也未尝不可.但更少的控件能够使我们

站立会议的内容(第八次)

今天利用了软件工程课以及之后的晚自习时间,我们成功完成了对主窗体form.cs的编写 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using

C# 窗体

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace Wi

C# 重绘 windows 窗体标题栏和边框

1 using System; 2 using System.Collections.Generic; 3 using System.Windows.Forms; 4 using System.ComponentModel; 5 using System.Drawing; 6 using System.Drawing.Drawing2D; 7 using System.Runtime.InteropServices; 8 using System.Diagnostics; 9 10 namesp

C#写的几段WinForm MDI窗体控制的代码分享

/// <summary> /// 功能:MDI程序中设置主窗体大小为显示器工作区大小 /// </summary> /// <param name="MainForm">主窗体实例</param> public static void SetMainFormSize(Form MainForm) { MainForm.Location = new Point(0, 0); MainForm.Width = Screen.PrimaryS

winform实现截图

这个截图模仿QQ截图,左键单击开始截图,鼠标移动出现方框确定截图尺寸,放开时为最终尺寸,双击鼠标弹出保存对话框进行保存. 还有一点就是,如果截图尺寸方框已经确定,移动鼠标到所选区域内时,鼠标会变手型,可以拖动该方框到任意地方进行截图. 建立ScreenCutter解决方案,在其下建立两个windows窗体,一个为MainForm,一个为ScreenBody. 在MainForm中放一个按钮,点击按钮时,获取整个桌面为背景图片,调用ScreenBody. MainForm的代码为: using S