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属性,似乎很完美,应该定义这四项,就能明确指定窗体的大小和位置了吧?然而并非如此。Right和Bottom是只读的属性,可以用它们来获取窗体边距,却不能用来指定边距。
确定窗体位置,只需要窗体左上角这一个点的位置。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;
窗体是有最小值和最大值的,可以通过设置MaximumSize和MinimumSize来指定。如果没有指定,最大不能超过屏幕分辨率,最小不是(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属性为Maximized和Manimized来实现窗体的最大化和最小化。如果需要全屏显示,可将窗体大小设置为屏幕大小(见三)。但此时可能需要隐藏上方的图标、标题、最大最小化和关闭按钮。方法为设置FormBorderStyle为None。
五、窗体置于顶层
设置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窗体位置的主要内容,如果未能解决你的问题,请参考以下文章
在“错误的行”中抛出异常(C#、Windows 窗体、VS2017)
windowsForm程序中,关于窗体控件接收信息的响应等问题~!