WindowsForm窗体位置

Posted world_of_MFK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WindowsForm窗体位置相关的知识,希望对你有一定的参考价值。

      WindowsForm的窗体,是winForm程序的基本单元。窗体的大小和位置是如何控制的呢?

 

先看窗体的几个属性。如下图所示

 

一、 设置窗体起始位置居中

窗口默认是在左上角的,可以用微软定义好的FormStartPosition属性来配置为居中:

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

等同于

这个属性的其他值也可以了解下:

属性值

说明

CenterParent

在其父窗体中居中

Manual

位置由Location属性决定

WindowsDefaultBounds

默认位置,边界也默认

WindowsDefaultLocation

默认位置,尺寸在窗体大小中指定

 

其中提到了Location属性,下面详谈。

 

二、 指定窗体位置和大小。

窗体有Left,Right,Top,Bottom属性,似乎很完美,应该定义这四项,就能明确指定窗体的大小和位置了吧?然而并非如此。RightBottom是只读的属性,可以用它们来获取窗体边距,却不能用来指定边距。

确定窗体位置,只需要窗体左上角这一个点的位置。Left,Top 就是这个点与屏幕左、上边距的距离,换句话说,窗体的Location属性,实际上就是(Left,Top)。 下面的语句是等价的:

this.Location=new Point(100,100);

this.Left = 100; this.Top = 100;

而确定窗体的大小,用Width 宽度和Height高度,就够了。指定当前窗体的大小很简单:

 this.Width = 600;

 this.Height =480;

窗体是有最小值和最大值的,可以通过设置MaximumSizeMinimumSize来指定。如果没有指定,最大不能超过屏幕分辨率,最小不是(0,0),而是系统自己计算出的能让这几个图标显示出来的大小:  

有时候涉及到对于窗体大小的动态调整,就应该注意判断,不要越界。那么如果想设置窗体能根据不同屏幕的大小自动调整呢?

 

三、 根据分辨率调整窗体大小

首先要获取屏幕大小:

            int width = Screen.PrimaryScreen.WorkingArea.Width;

            int height = Screen.PrimaryScreen.WorkingArea.Width;

Screen.PrimaryScrenn为获取显示器,如果有多显示器也可以用Screen.AllScreens[0],Screen.AllScreens[1]...WorkingArea为桌面工作区域,不包括任务栏等。

然后设置宽度和高度:

            this.Width = (int)(width / 2);

            this.Height = (int)(height / 2);

 

四、窗体最大化、最小化和全屏

通过设置WindowsState属性为MaximizedManimized来实现窗体的最大化和最小化。如果需要全屏显示,可将窗体大小设置为屏幕大小(见三)。但此时可能需要隐藏上方的图标、标题、最大最小化和关闭按钮。方法为设置FormBorderStyleNone

 

五、窗体置于顶层

设置TopMost属性为True即可。

 

由上述内容可见,基本上都是通过设置窗体的属性来实现,在学习过程中,对各种属性应该有一个基本的了解。.net将很多工作都隐藏在幕后,所以在属性窗口的设置,其实也可以通过代码来实现。如果有不清楚的地方,可以打开对应的Designer.cs文件来查看,更是大大方便了学习。可以看这一段:

           //

          // Form1

            //

            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            this.Controls.Add(this.btnOpenNewForm);

            this.Controls.Add(this.btnChangePos);

            this.Controls.Add(this.txttop);

            this.Controls.Add(this.txtWidth);

            this.Controls.Add(this.txtHeight);

            this.Controls.Add(this.txtLeft);

            this.Controls.Add(this.label4);

            this.Controls.Add(this.label3);

            this.Controls.Add(this.label2);

            this.Controls.Add(this.label1);

            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

            this.Name = "Form1";

            //起始居中

            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

            //窗体位置和大小

            this.Location = new System.Drawing.Point(100, 100);

            this.ClientSize = new System.Drawing.Size(454, 400);

 

            this.Text = "Form1";

            //窗体置顶

            this.TopMost = true;

            //窗体最大化

            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;

            this.Load += new System.EventHandler(this.Form1_Load);

            this.ResumeLayout(false);

            this.PerformLayout();

 

以上是关于WindowsForm窗体位置的主要内容,如果未能解决你的问题,请参考以下文章

WindowsForm 窗体属性和控件

轻松3步实现c#windowsform窗体美化

在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)

windowsForm程序中,关于窗体控件接收信息的响应等问题~!

控制 C# windows 窗体的大小问题,在编译时看起来不同,在运行时看起来不同

WindowsForm多窗体多窗体传值控件数据绑定--12月8日