1、C#范例开发大全样章03411901第1章 窗 体 设 置窗体也就是窗口,是指软件的外观,是图形化的用户界面。Windows窗体是最常见的,通常所看到的软件界面基本上都是Windows窗体。一个窗体里会包括很多控件,这些控件用于和用户进行交互。要设计一个窗体并不复杂,但是要使一个窗体完全符合应用程序的要求,还需要掌握很多相关的知识。本章介绍在Windows应用程序中使用C#创建并设置窗体的技巧和方法。1.1 常规窗体设置图1.1 控制窗体大小常规窗体设置包括设置窗体的基本方法,也是应用软件界面设计中最常用的方法。本节通过12个例子,学习基本的窗体设置方法,并通过这些方法逐步掌握窗体设计的技巧。
2、实例001 控制窗体大小【实例介绍】 通常见到的Windows窗体是可以调 整大小的,但是对于一些特定的应用程序,希望窗体的大小只能在一定范围内改变,而不是随意改变大小。本实例实现固定窗体大小的功能,实例运行效果如图1.1所示。【开发过程】(1)使用Visual Studio 2008创建一个Windows应用程序,项目名称为Ex01,窗体默认为Form1。(2)在窗体的Load事件中编写如下代码。01 private void Form1_Load(object sender, EventArgs e)02 03 this.MaximumSize = new Size(400,400); /
3、设定窗体最大值为400*40004 this.MinimumSize = new Size(300,300); /设定窗体最小值为300*30005 【关键技术解析】固定窗体大小需要设置窗体的两个属性的值:Maximumsize和Minimumsize。Maximumsize表示窗体可以调整到的最大尺寸,Minimumsize表示窗体可以调整到的最小尺寸。这两个值可以在设计窗口的属性面板中设置,也可通过编写代码实现。【拓展应用】 这两个属性值在窗体初次显示时可设定。 在窗体运行时也可设定尺寸。实例002 最前端显示窗体图1.2 最前端显示窗体【实例介绍】 在Windows应用程序中多窗体程序是
4、经常碰到的,在几个窗体同时打开时,用户希望有的窗体总是位于其他窗体的最前面,从而更方便交互。本实例实现指定的窗体始终位于其他窗体之上,实例运行效果如图1.2所示。【开发过程】(1)新建一个Windows应用程序,项目名称为Ex02。在默认窗体Form1中添加Button(按钮)控件,修改其Text属性值为“打开另一窗体”,Name属性值为btnOpen。(2)在项目中添加一个新的窗体,默认名称为Form2。(3)设置Form1窗体的TopMost属性值为True。(4)在btnOpen按钮的单击事件(Click)中编写以下代码。01 private void button1_Click(obj
5、ect sender, EventArgs e)02 03 Form2 frm = new Form2(); /实例化窗体Form204 frm.Show();/ /显示窗体05 运行程序,什么都不输入,单击“打开另一窗体”按钮,此时效果如图1.2所示。新打开的窗体位于Form1窗体的下面,说明TopMost属性的设置发挥了作用。【关键技术解析】通过设置窗体的TopMost属性值可以实现。TopMost属性指示该窗体是否始终显示在此属性未设置为True的所有其他窗体之上。【拓展应用】 如果不在属性设置面板中设置值,在代码中编写也可以实现。 如果同时有几个窗体都设置TopMost属性值为True
6、,此时在最前端的窗体由当前活动窗体决定。实例003 设置窗体相对起始位置【实例介绍】 本实例实现了设置窗体起始位置。运行程序,什么都不输入,单击“打开另一窗体”按钮,新打开的窗体位于规定的起始位置,实例运行效果如图1.3所示。图1.3 设置窗体起始位置【开发过程】(1)新建一个Windows应用程序,窗体默认为Form1,在其中添加Button(按钮)控件,修改其Text属性值为“打开另一窗体”,Name属性值为btnOpen。(2)在项目中添加一个新的窗体,默认名称为Form2。(3)设置Form1窗体的Location 属性值(200,200),StartPosition属性值为Manua
7、l。(4)在btnOpen按钮的单击事件中编写以下代码。01 private void button1_Click(object sender, EventArgs e)02 03 Form2 objfrm = new Form2(); /创建Form2的对象04 objfrm.Location = new Point(400,200); /设置窗体相对于屏幕左上角的位置05 objfrm.StartPosition = FormStartPosition.Manual; /设置窗体起始位置06 objfrm.Show(); /显示窗体07 【关键技术解析】在Windows应用程序中的窗体在打
8、开或者初次显示时,规定一个合理的起始位置可以使程序更加人性化和美观,窗体位置的设定主要是通过设置窗体的Location属性值和StartPosition属性。Location 属性值指定窗体在计算机屏幕上的显示位置,以像素为单位指定窗体左上角的位置。StarPosition属性指示显示区域的边界。注意:只有在StartPosition属性设为Manual时,Location属性的值才起作用。【拓展应用】 在窗体载入(load)事件中设定Location和StartPosition属性的值也可以实现。 如果StartPosition属性的值不是Mannal,则在窗体打开时将根据该属性值设定的显示
9、方式显示,Location属性指定的值失去作用。实例004 设置窗体透明度图1.4 设置窗体透明度【实例介绍】 本实例通过设置窗体的Opacity属性值设置窗体的透明度,运行程序,可以看到窗体以50%的透明度显示。效果如图1.4所示。【开发过程】(1)创建一个Windows应用程序,项目名称为Ex04,窗体默认为Form1。(2)设置窗体的Opacity属性的值为50%。【关键技术解析】可以通过设置窗体的Opacity属性来设置窗体的透明度,该属性不仅影响窗体本身的透明度,也影响窗体所包含的控件的透明度。Opacity属性的最大值为1.0,此时窗体完全不透明,最小值为0.0,此时完全透明。可以
10、通过设置Opacity属性的不同值,使窗体产生不同的透明度,制作一些特殊的视觉效果。注意:窗体的Opacity属性值对窗体中所有控件都起作用。【拓展应用】 窗体Opacity属性的值可以在设计面板中设定,也可在代码编写中重新赋值。 可以通过设置Opacity属性值的变化,让窗体逐渐透明或逐渐显示出来。实例005 设置窗体颜色【实例介绍】 本实例实现改变窗体颜色的功能。运行程序,此时显示的窗体的颜色如图1.5所示,单击“改变窗体颜色”按钮,此时效果如图1.6所示,此时窗体颜色发生了变化。 图1.5 窗体起始颜色 图1.6 窗体颜色改变【开发过程】(1)创建一个Windows应用程序,项目名称为E
11、x05,窗体默认为Form1。(2)设置窗体的BackColor属性值为SeaShell。(3)在窗体中添加Button控件,Name属性设为btnColor,Text属性设为“改变窗体颜色”。(4)在btnColor按钮的单击事件中编写以下代码。01 private void btnColor_Click(object sender, EventArgs e)02 03 this.BackColor = Color.BlueViolet; /设置窗体颜色04 【关键技术解析】可以通过设置窗体的BackColor属性的值来设置窗体的颜色,该属性值在设计面板中可以在下拉列表框中选择相应的颜色值来
12、确定,也可通过编写代码实现。【拓展应用】 窗体颜色的值不仅通过Color类的枚举值可以实现,也可以通过使用Color.From- Argb()方法,在该方法中设定相应的参数即可。 如果Opacity属性的值设为0,此时窗体处于完全透明状态,设置窗体颜色的值将失去作用。 窗体中控件的颜色也可通过BackColor属性的值来设置。实例006 在多窗体间移动控件【实例介绍】 本实例实现在窗体间移动控件的功能。运行程序,此时显示的窗体如图1.7所示。单击“打开另一窗体”按钮,打开窗体Form2,然后在单击“被移动的控件”标签,效果如图1.8所示,该标签控件移动到了窗体Form2中,显示文本为“返回原地
13、”。此时单击“返回原地”标签,又可将该控件移动到窗体Form1中。 图1.7 初始窗体 图1.8 控件移动后的窗体【开发过程】(1)创建一个Windows应用程序,项目名称为Ex06,窗体默认为Form1。(2)在Form1窗体中添加一个Button控件和一个Label控件,Button控件的Text属性设为“打开另一个窗体”,Label控件的Text属性设为“被移动的控件”。(3)在项目中添加窗体Form2。(4)在Form1的代码编辑器中声明Form2的对象,代码如下:Form2 myfrm; /声明窗体对象(5)在“打开另一窗体”按钮的单击事件中编写以下代码。01 private voi
14、d button1_Click(object sender, EventArgs e)02 03 myfrm = new Form2(); /实例化窗体Form204 myfrm.Show(); /显示窗体05 (6)在标签控件“被移动的控件”的单击事件中编写以下代码。01 private void label1_Click(object sender, EventArgs e)02 03 if (this.label1.Parent = this) /判断准备移动的控件位于当前窗体中04 05 myfrm.Controls.Add(this.label1); /将控件添加到窗体Form2中0
15、6 this.label1.Text = 返回原地; /移动的控件文本显示内容07 08 else /如果当前控件在另外窗体中09 10 this.Controls.Add(this.label1); /将控件添加到当前窗体中11 this.label1.Text = 开始移动; /控件显示的内容12 13 【关键技术解析】窗体中的可视控件不仅可以显示在创建时的窗体中,也可以被移动到别的窗体中。每一个可视控件都有所有者和Parent属性,所有者是控件创建时指定的所属对象,Parent属性表示控件的父对象,可以判断控件是否在该窗体中。通过Form.Controls.Add(控件)方法为窗体添加控
16、件。 注意:可以使用Form.Controls.Remove(控件)方法从窗体移除控件。【拓展应用】 窗体之间可以实现互操作控件。 窗体中的可视控件都可以实现窗体间的移动。实例007 右对齐窗体标题文字图1.9 窗体标题文字右对齐【实例介绍】 本实例实现右对齐标题文字的效果。运行程序,此时显示的窗体如图1.9所示,实现了窗体标题右对齐。【开发过程】(1)创建一个Windows应用程序,窗体默认为Form1。(2)将Form1的Text属性值设为“窗体标题文字”。(3)设置窗体的RightToLeft属性值为Yes。【关键技术解析】默认窗体的标题文字是与窗体实现左对齐,显示在窗体的左边。有时为了
17、使窗体风格统一,更加美观需要使窗体标题文字右对齐。将窗体的RightToLeft属性的值设为Yes,即可实现窗体标题右对齐。Form. RightToLeft属性用于获取或设置一个值,该值指示是否将控件的元素对齐以支持使用从右向左的字体的区域设置。【拓展应用】 利用Timer控件实现窗体标题栏文字左右闪动。 将窗体的RightToLeftLayout属性值设为True,可以将窗体的图标实现右对齐。实例008 改变无边框窗体大小【实例介绍】 本实例实现改变无边框窗体大小的功能。运行程序,此时显示的窗体如图1.10所示,用鼠标可以改变窗体的大小。图1.10 改变无边框窗体大小【开发过程】(1)创建
18、一个Windows应用程序,项目名称为Ex08,窗体默认为Form1。(2)将Form1的Text属性值设为空,ControlBox属性值设为False。【关键技术解析】当窗体样式FormBorderStyle属性的值设为None时,窗体表现为无边框状态,运行此窗体要改变窗体大小需要比较复杂的方法才能实现。本实例通过简单的技巧实现相同的效果,关键是在设计窗体时,将Text属性值设为空,同时将窗口样式中的ControlBox属性值设为False。ControlBox属性确定窗体是否有“控件/系统”菜单框,显示控件框,则为True,不显示则为False。【拓展应用】 设置窗体最大化显示。 设置窗体
19、最小化显示。实例009 移动无边框窗体图1.11 无边框窗体移动【实例介绍】 有边框窗体移动是非常简单而常见的操作,无边框窗体的移动相对比较复杂,本实例实现使用鼠标移动无边框窗体的功能。运行程序,此时显示的窗体如图1.11所示,使用鼠标可实现窗体移动。【开发过程】(1)创建一个Windows应用程序,项目名称为Ex09,窗体默认为Form1。(2)将Form1的FormBorderStyle属性的值设为None,此时窗体表现为无边框状态。(3)在窗体的MouseDown事件中编写以下代码。01 /设置全局变量,初始化02 bool beginMove = false;03 int curren
20、tXPosition = 0;04 int currentYPosition = 0;05 private void Form1_MouseDown(object sender, MouseEventArgs e)06 07 beginMove = true;08 currentXPosition = MousePosition.X; /鼠标的X坐标为当前窗体左上角X坐标09 currentYPosition = MousePosition.Y; /鼠标的Y坐标为当前窗体左上角Y坐标10 (4)在窗体的MouseMove事件中编写以下代码。01 private void Form1_Mouse
21、Move(object sender, MouseEventArgs e)02 03 if (beginMove)04 05 this.Left += MousePosition.X - currentXPosition; /根据鼠标X坐标确定窗体的左边坐标X06 his.Top += MousePosition.Y - currentYPosition; /根据鼠标的Y坐标窗体的顶部,即Y标07 currentXPosition = MousePosition.X; /获取鼠标X坐标08 currentYPosition = MousePosition.Y; /获取鼠标Y坐标09 10 (5
22、)在窗体的MouseUp事件中编写以下代码。01 private void Form1_MouseUp(object sender, MouseEventArgs e)02 03 beginMove = false; /停止移动04 (6)在窗体的MouseLeave事件中编写以下代码。01 private void Form1_MouseLeave(object sender, EventArgs e)02 03 currentXPosition = 0; /设置初始状态04 currentYPosition = 0; /设置初始状态05 beginMove = false; /设置初始状态
23、06 【关键技术解析】当窗体样式FormBorderStyle属性的值设为None时,窗体表现为无边框状态,此时运行程序,窗体不能移动。实现无边框窗体移动的方法很多,本实例通过获取鼠标坐标变化来设置窗体的位置,窗体的位置通过其左上角顶点的x、y坐标可以确定,左上角顶点x、y坐标值分别与Left、Top属性的值相对应。无边框窗体移动通过编写鼠标移动、按下、离开、释放事件中的代码实现。【拓展应用】 可实现不规则窗体移动。 可实现不规则窗体禁止移动。实例010 禁止关闭窗体【实例介绍】 本实例实现禁止关闭窗体的功能。运行程序,单击“关闭”按钮,窗体并不能关闭。【开发过程】(1)创建一个Windows
24、应用程序,项目名称为Ex010,窗体默认为Form1。(2)为Form1的FormClosing事件编写代码如下:01 private void Form1_FormClosing(object sender, FormClosingEventArgs e)02 03 e.Cancel = true; /取消该事件04 【关键技术解析】普通窗体中都有最小化、最大化和关闭按钮,在程序运行时,如果没有编写任何代码,单击关闭按钮可关闭窗体。要实现禁止关闭窗体的功能,也就是单击关闭按钮时不能关闭窗体,取消关闭操作即可实现。窗口正要关闭但是没有关闭之前会触发FormClosing事件,该事件中的参数Fo
25、rmClosingEventArgs e中包含Cancel属性,如果设置该属性为True,窗口将不会被关闭。【拓展应用】 可实现关闭窗体时出现提示对话框。 使窗体关闭出现在任务栏中。实例011 通过控件拖动窗体图1.12 使用控件移动窗体【实例介绍】 本实例实现了通过控件移动窗体的功能。运行窗体,在Button控件上按下鼠标左键移动鼠标,此时窗体会随着移动,效果如图1.12所示。【开发过程】(1)创建一个Windows应用程序,项目名称为Ex011,窗体默认为Form1。(2)将Form1的FormBorderStyle属性的值设为None,此时窗体表现为无边框状态。(3)在窗体中添加Butt
26、on控件,将Text属性设为“移动窗体”。(4)定义全局变量来记录鼠标按下时的初始位置,代码如下:01 private int startX; /X坐标02 private int StartY; /Y坐标(5)在Button控件的MouseDown事件中编写代码如下:01 private void button1_MouseDown(object sender, MouseEventArgs e)02 03 if (e.Button = MouseButtons.Left) /判断是否按下鼠标左键04 05 startX = e.X; /获取鼠标事件中鼠标的X坐标06 startY = e.
27、Y; /获取鼠标事件中鼠标的Y坐标07 08 (6)在Button控件的MouseMove事件中编写代码如下:01 private void button1_MouseMove(object sender, MouseEventArgs e)02 03 if (e.Button = MouseButtons.Left)04 05 this.Left += e.X - startX; /窗体左上顶点的X坐标06 this.Top += e.Y - StartY; /窗体左上顶点的Y坐标07 08 【关键技术解析】通常拖动窗体时是将鼠标放在窗体标题栏中才可实现,那么对于无边框窗体,利用前边讲过的移
28、动无边框窗体的方法可以实现,也可通过窗体中的控件移动窗体。通过控件移动窗体必须要判断鼠标的动作。在控件上按住鼠标左键进行移动,移动到目的位置后释放鼠标,在控件的MouseDown、MouseMove事件中编写代码即可。【拓展应用】 普通窗体也可实现通过控件移动。 使用其他可视化控件实现移动窗体。实例012 根据窗体自动调整控件【实例介绍】 本实例实现根据窗体大小自动调整控件的功能。运行程序效果如图1.13所示。当调整窗体大小时,窗体中的控件会自动调整,效果如图1.14所示。【开发过程】(1)创建一个Windows应用程序,项目名称为Ex012,窗体默认为Form1。(2)在窗体中添加一个Lab
29、el控件、一个TextBox控件、一个ComboBox控件、一个ListView控件,设计界面如图1.13所示。 图1.13 设计窗体界面 图1.14 根据窗体自动调整控件(3)定义全局变量,记录窗体的宽度和高度,代码如下:private float X; private float Y; /全局变量(4)编写方法获取控件的宽度、高度、左边缘、上边缘和字体大小,实现代码如下:01 /获取控件的width、height、left、top、字体大小的值,存放在控件的Tag 属性中02 private void setTag(Control cons)03 04 /遍历窗体中的控件05 foreac
30、h (Control con in cons.Controls)06 07 con.Tag = con.Width + : + con.Height + : + con.Left + : + con.Top + : + con.Font.Size;08 if (con.Controls.Count 0) 09 setTag(con); /递归调用10 11 (5)在窗体载入事件Form_Load中编写代码如下:01 private void Form1_Load(object sender, EventArgs e)02 03 this.Resize += new EventHandler(Form1_Resize); /窗体调整大小事件时执行的方法04 X = this.Width; /获取窗体的宽度05 Y = this.Height; /获取窗体的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1