vb窗口形状改变

上传人:z****2 文档编号:181743748 上传时间:2023-01-16 格式:DOCX 页数:22 大小:384.24KB
返回 下载 相关 举报
vb窗口形状改变_第1页
第1页 / 共22页
vb窗口形状改变_第2页
第2页 / 共22页
vb窗口形状改变_第3页
第3页 / 共22页
点击查看更多>>
资源描述
用 VB.NET 设计各种形状的窗体界面窗体是程序设计最常见,最普通,也是最容易受到程序员忽视的编程对象。一般来说,在Visual Basic.Net针对窗体的编 程是不需要人为介入的,因为可视化编程工具Visual Studio.Net已经按照窗体的缺省状态实现了。但是在最近遇到的应 用程序中。我们发现越来越多的应用程序中使用到各种不同规则的窗体,这些不同规则的窗体给应用程序带来异常的情趣和 不同平常的效果的同时,也促使使用者思考这样一个问题,如何创建这些窗体?在Visual Basic.Net中提供了一种简单、 直接创建不规则窗体的方法,本文的主要内容就是探讨一下这些方法具体的实现过程。下面就来详细介绍在VisualBasic.Net中实现五种不同规格窗体的方法,即:椭圆形、扇形、圆形、环形和三角形。掌握了这五种不同形状窗体 的实现方法后,我想对于其他规则的窗体就不应该有什么问题了。Visual Basic .Net中创建、使用MDI窗体也是本文的重要内容之一,MDI是Multi Documentlnterface的简称,即:多文档界面,MDI最早出现于Windows2.0中,最先使用到MDI的应用程序是Excel电子表格。为了方便使用者同 时能够操作多份电子表格,Excel就采用了 MDI来解决这个问题。到了 Windows3.1中,MDI在应用程序中得到了更大 范围的应用。其中Windows3.1中的程序管理器和文件管理器都采用了 MDI。目前MDI在应用程序中依然被广泛采用。 下面就首先来介绍一下Visual Basic.Net创建不规则窗体的相关知识和具体实现方法。一简介 Visual Basic .Net 中定制不规则窗体时使用的类库:Visual Basic.Net中定制不规则窗体主要使用到Region类和GraphicsPath类,其中以GraphicsPath类最为重要。Gr aphicsPath 类和 Regi on 类分别位于.Net Fr ameW or kSDK 中的System.D rawi ng.D raw in g2D命名空间和 System.Drawing命名空间。在Visual Basic.Net中具体实现各种不规则窗体的过程中,GraphicsPath主要作用是根 据程序员的要求,通过GraphicsPath中提供的方法绘制不同规则的形状。Region的主要作用是依靠GraphicsPath实例 来初始化 Region 对象,从而形成不规则窗体。其具体的实现过程是,首先通过GraphicsPath类构造函数创建GraphicsPath实例,然后通过GraphicsPath中提 供的方法按照程序员的要求绘制形状,最后以GraphicsPath实例来初始化Region对象。完成不规则窗体。可见了解、掌 握GraphicsPath类对于理解本文介绍的实现方法是非常必要的。表01和表02分别是GraphicsPath类的常用方法和常 用属性及其说明:在本文用Visual Basic.Net实现的椭圆形、扇形、圆形、环形和三角形等形状窗体中就使用到GraphicsPath中的AddEllipse方法(绘制椭圆形)、AddPie方法(绘制扇形)、AddLine方法(绘制直线)等方法。GraphicsPath中提供了丰富的方法,这对实现更复杂的窗体形状是非常有用的,但完全掌握这些方法的使用方法也需要花费大量的时间和精 力。属性说明FillMode获取或设置一个FillMode枚举,它确定此PathData获取一个PathData对象,它封装此GraphicsPath实例的点(points)和类型(types)的数 组。PathPoi nts获取路径中的点。PathTypes获取PathPoints数组中相应点的类型。Poin tCo unt获取PathPoints或PathTypes数组中的元素数。表 02: GraphicsPath 类中的常用属性及其说明方法说明AddA rcGraphicsPath向当前图形追加一段椭圆弧。AddBezie rGraphicsPath向当前图形添加一段立方贝塞尔曲线。AddBezie rsGraphicsPath向当前图形添加一系列相互连接的立方贝塞尔曲线。AddClosedC urveGraphicsPath向此路径添加一个闭合曲线。由于曲线经过数组中的每个点,因此使用 基数样条曲线。AddCu rveGraphicsPath向当前图形添加一段样条曲线。由于曲线经过数组中的每个点,因此使 用基数样条曲线。AddEllipseGraphicsPath向当前路径添加一个椭圆。AddLi neGraphicsPath向此GraphicsPath实例追加一条线段。AddLi nesGraphicsPath向此GraphicsPath实例末尾追加一系列相互连接的线段。AddPath将指定的GraphicsPath实例追加到该路径。AddPieGraphicsPath向此路径添加一个扇形轮廓。AddPolygo nGraphicsPath向此路径添加多边形。AddRecta ngleGraphicsPath向此路径添加一个矩形。AddRecta nglesGraphicsPath向此路径添加一系列矩形。AddSt ringGraphicsPath向此路径添加文本字符串。CleaMarkers清除此路径的所有标记。Clo ne创建此路径的一个精确副本。CloseAllFig ures闭合此路径中所有开放的图形并开始一个新图形。它通过连接一条从图形的终结点到起 始点的直线,闭合每一开放的图形。CloseFig ure闭合当前图形并开始新的图形。如果当前图形包含一系列相互连接的直线和曲线,该方 法通过连接一条从终结点到起始点的直线,闭合该环回。Flatte nGraphicsPath将此路径中的各段曲线转换成相连的线段序列。GetBoundsGraphicsPath返回限定此GraphicsPath实例的矩形。GetLastPoi nt获取此GraphicsPath实例PathPoints数组中的最后的点。IsOutli neVisibleGraphicsPath指示当使用指定的Pen对象绘制此GraphicsPath实例时,指定点是否 包含在后者的轮廓内。IsVisibleGraphicsPath指示指定点是否包含在此GraphicsPath实例内。Reset清空 PathPoints 和 PathTypes 数组并将 FillMode 设置为 Alternate。Reve rse反转此GraphicsPath实例的PathPoints数组中各点的顺序。SetMa rke rs在此GraphicsPath实例上设置标记。Sta rtFig ure不闭合当前图形即开始一个新图形。后面添加到该路径的所有点都被添加到此新图形 中。Transform将变形矩阵应用到此GraphicsPath实例。Wa rpGraphicsPath对此GraphicsPath实例应用由一个矩形和一个平行四边形定义的扭曲变形。Wide nGraphicsPath在用指定的画笔绘制此路径时,用包含所填充区域的曲线代替此路径。AddA rcGraphicsPath向当前图形追加一段椭圆弧。AddBezie rGraphicsPath向当前图形添加一段立方贝塞尔曲线。表 01: GraphicsPath 类的常用方法及其说明二.Visual Basic .Net中定制不规则窗体的具体步骤:正如前文所说在Visual Basic .Net定制不同规则的窗体是比较容易的,再了解了上面内容后,下面就是在VisualBasic .Net实现椭圆形、扇形、圆形、环形和三角形等五种形状窗体的具体实现步骤:1. 启动 Visual Studio .Net。2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。3. 将【项目类型】设置为【Visual Basic项目】。4. 将【模板】设置为【Windows应用程序】。5. 在【名称】文本框中输入【VB.NET中定制不规则窗体】。6.在【位置】的文本框中输入【E:VS.NET项目】,然后单击【确定】按钮,这样在E:VS.NET项目目录中就产生了名称为VB.NET中定制不规则窗体的文件夹,并在里面创建了名称为VB.NET中定制不规则窗体的项目文件。具体如 图01所示:图01:【VB.NET中定制不规则窗体】新建项目对话框7.把Visual Studio .Net的当前窗口切换到【Forml.vb (设计)】窗口,并从【工具箱】中的【Windows窗体组 件】选项卡中往Form1窗体中拖入下列组件,并执行相应的操作:五个Button组件,用以定制五种不同形状窗体,并在这个Button组件拖入Form1的设计窗体后,双击它们,则系 统会在Form1.vb文件分别产生这五个组件的Click事件对应的处理代码。4.在上述组件拖入窗体后,分别按照图02所示排列并设置窗体中的各组件:图02:【VB.NET中定制不规则窗体】项目的设计界面8.把Visual Basic .Net当前窗口切换到Forml.vb的代码编辑窗口,并用下列代码替换Forml.vb中的Button1的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为椭圆形:Pr ivate Sub Butt on1 _Click ( ByVal sender As System.Object , ByVal e As System.Eve ntArgs ) Han diesButt on I.CIickDim p As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath ()Dim Width As In teger = Me.Clie ntSize.WidthDim Height As In tege r = Me.Clie ntSize.Heightp.AddEllipse ( 0,20 , Width - 50 , Height - 100 )根据要绘制椭圆的形状来填写AddEllipse方法中椭圆对应的相应参数Regi on = New Regi on ( p )End Sub9.用下列代码替换Forml.vb中的Button2的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为扇形:Pr ivate Sub Butt on 2_Click ( ByVai sender As System.Object , ByVai e As System.Eve ntArgs ) Han diesButto n2.ClickDim p As System.D rawi ng.D rawi ng2D.G raphicsPath = New System.D rawi ng.D rawi ng2D.G raphicsPath () p.AddPie ( 10 , 10,250,250 , 5 , 150 )根据要实现的扇形形状来填写AddPie方法中的相应参数Me.Regi on = New Regi on ( p )End Sub10.用下列代码替换Forml.vb中的Button3的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为圆 形:Pr ivate Sub Butt on 3_Click ( ByVai sender As System.Object , ByVai e As System.Eve ntArgs ) Han diesButto n3.CiickDim p As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath ()Dim Width As In tege r = Me.Ciie ntSize.WidthDim Height As In tege r = Me.Ciie ntSize.Heightp.AddEiiipse ( 0,0 , Height , Height )Me.Regi on = New Regi on ( p )圆形即是椭圆的一种特例,End Sub11.用下列代码替换Form1.vb中的Button4的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为环 形:Pr ivate Sub Butt on4 _Click ( ByVai sender As System.Object , ByVai e As System.Eve ntArgs ) Han diesButt on 4.ClickDim p As System.D rawi ng.D rawi ng2D.G raphicsPath = New System.D rawi ng.D rawi ng2D.G raphicsPath ()Dim Height As In tege r = Me.Clie ntSize.HeightDim width As In tege r = 100p.AddEllipse ( 0,0 , Height , Height )p.AddEllipse ( width , width , Height - ( width * 2 ) , Height - ( width * 2 )根据环形的形状来分别填写AddEllipse方法中相应的参数Me.Regi on = New Regi on ( p )End Sub12.用下列代码替换Form1.vb中的Button5的Click事件对应的处理代码,下列代码功能是改变当前窗体形状为三角形:Pr ivate Sub Butt on 5_Click ( ByVai sender As System.Object , ByVai e As System.Eve ntArgs ) Han dles Butto n5.ClickDim p As System.D rawi ng.D rawi ng2D.G raphicsPath = NewSystem.D rawi ng.D rawi ng2D.G raphicsPath ()p.AddL ine ( 0,0 , 250 , 150 )p.AddLi ne ( 250 , 150,0,300 )p.AddLi ne ( 0,0,0,300 )根据三角形的形状特征来分别填写AddLine方法中相应的参数Me.Regi on = New Regi on ( p )End Sub13.至此在上述步骤都正确完成后,【VB.NET中定制不规则窗体】项目的全部工作就基本完成了。此时单击快捷键F5运行程序,单击【VB.NET中定制不规则窗体】中的【椭圆形】按钮,则会得到图03所示的运行界面:图03:【VB.NET中定制不规则窗体】项目运行界面之一单击【VB.NET中定制不规则窗体】中的【扇形】按钮,则会得到图04所示的运行界面:图04:【VB.NET中定制不规则窗体】项目运行界面之二单击【VB.NET中定制不规则窗体】中的【圆形】按钮,则会得到图05所示的运行界面:图05:【VB.NET中定制不规则窗体】项目运行界面之三单击【VB.NET中定制不规则窗体】中的【环形】按钮,则会得到图06所示的运行界面:单击【VB.NET中定制不规则窗体】中的【三角形】按钮,则会得到图07所示的运行界面:图07:【VB.NET中定制不规则窗体】项目运行界面之五三.Form类和Menuitem类中和MDI相关的属性和方法:接下来就来介绍了 Visual Basic .Net中创建、使用MDI窗体的相关知识和具体的实现方法。Visual Basic.Net为编 写MDI程序提供了强大支持,使得程序员编写一个MDI程序是那么的方便,最能表现Visual Basic.Net对MDI支持的地 方是窗体(Form组件)和菜单(Menultem组件),只需对这二个组件的某些属性进行设置,就能够完成其他语言在编 写MDI程序时要花费很多精力才能够实现的工作。首先简要介绍一下这二个组件对应Net FrameWorkSDK中的 System.Windows.Forms命名空间中的Form类和Menultem类中提供了的实现MDI的方法和属性。也正是由于在 Form类和Menultem类中提供了很多和MDI相关的属性和方法,才使得在Visual Basic.Net编写MDI应用程序那么方 便,下面是这二个类中和MDI相关的属性、方法及其说明。属性说明IsMdiChild获取一个值,该值指示该窗体是否为MDI子窗体。IsMdiC ontainer获取或设置一个值,该值指示窗体是否为MDI子窗体的容器。MdiChild ren获取窗体的数组,这些窗体表示以此窗体作为父级的MDI子窗体。MdiPa rent获取或设置此窗体的当前MDI父窗体。表03: Form类中和MDI相关的属性及其说明其中和MDI编程相关最为重要的属性是IsMdiChild和“MdiParentoForm类中虽然只提供了一个和MDI编程相关的方法,但此方法功能比较强大,它能够方便的实现对MDI父窗体中的所有MDI子窗体进行四种不同的排列:层叠、“水平平铺、“垂直平铺、“排列图标,这个方法就是LayoutMdi。LayoutMdi方法只有一个参数,此参数类型是MdiLayout枚举,MdiLayout枚举有四个值分别对应MDI父窗体中所有MDI子窗体的四种排列方式,MdiLayout枚举成员、其对应数值和说明如表04所示:MdiLayout枚举成员数值说明Cascade0层叠排列TileH or iz on tal1横行平铺TileVe rtical2纵向平铺Arran geIc ons3排列图标表 04: MdiLayout 枚举成员及其说明Menultem类中可用以实现MDI程序的组成成员虽然非常少,但所起的作用却是非常强大,表05所示是Menultem 类中用以MDI编程的属性及其说明:属性说明MdiList获取或设置一个值,通过该值指示是否使用在相关联窗体内显示的MDI子窗口列表来填充菜单 项。MdiListltem获取一个值,通过该值指示用于显示MDI子窗体列表的Menultem。表05: Menultem类中用以MDI编程的属性及其说明其中MdiList瞩性在MDI编程中非常重要,这一点将在后面介绍的示例中得以体现。四.Visual Basic .Net编写MDI应用程序的基本步骤:在下面介绍的示例基本囊括了 MDI应用程序的主要特征,其实现步骤也可以说是Visual Basic.Net编写MDI程序基 本步骤。在下面的实现步骤中,没有烦杂的代码,更多的是对组件属性值的设置,提供设置组件的属性,有时能够实现看似 需要很多代码才能够实现的工作。当然设置组件的属性对编写MDI应用程序也是非常重要的,缺一步都可能会影响后面程 序的正确运行。下面是Visual Basic .Net编写MDI应用程序的基本步骤:5. 启动 Visual Studio .Net。6. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。7. 将【项目类型】设置为【Visual Basic项目】。8.将【模板】设置为【Windows应用程序】。9.在【名称】文本框中输入【MDI编程】。10. 在【位置】的文本框中输入【E:VS.NET项目】,然后单击【确定】按钮,这样在E:VS.NET项目目录中就 产生了名称为MDI编程的文件夹,并在里面创建了名称为MDI编程的项目文件。11. 把Visual Studio .Net的当前窗口切换到【Forml.vb (设计)】窗口,并从【工具箱】中的【Windows窗体 组件】选项卡中往Form1窗体中拖入下列组件:一个 MainMenu 组件。12. 结合上一节介绍的方法,通过Visual Basic .Net的菜单设计器,按照图08和图09所示的菜单结构设计菜单。图08:【MDI编程】项目的菜单结构之一13.在利用菜单设计器设计完菜单后,分别在窗体中双击新建、退出、层叠显示、横行平铺、纵向平铺和 排列图标菜单项,这样Visual Basic .Net会在Forml.vb文件中分别产生这些菜单项的Click事件对应的处理代码。14.设定Forml的IsMdiContainer属性值为叮rue,这把Forml窗体定义为MDI窗体容器,这一步设置是后面编程的基础,当设置此属性值后,Form1的窗体也发生了改变,图10是设置此属性后的窗体模样:宰謀謀謀謀祁謀謀謀萍萍萍萍萍萍萍萍萍:口焉涓活活活活活活活$涓活涓活涓活涓活巧JnTxlII!文件窗口IIIII;:hihiH :I ii :I最潯特妙企璘企璘龄诳潴枱採採强龄口淫冬淫冬淫冬淫冬聲站涼站涼站明椚淖站图10:把Forml窗体设置为MDI窗体容器后的模样15选中图03中的窗口菜单项,并设置此菜单项的MdiList属性值为叮rue。其作用是当程序运行后,如果新建了一个MDI窗体,就会在窗口菜单项后,自动加入一个以新建MDI窗体名称命名的菜单项,如果新建了多个MDI窗体, 则会在窗口菜单项后,会加入以这些MDI窗体名称命名的菜单项。当MDI窗体被关闭,那些以此MDI窗体命名的菜单 项也会自动删除。具体可图 06 所示。16.把Visua Basic .Net的当前窗口切换到Forml.vb的代码编辑窗口,并在定义Forml中组件的代码区加入下列代码,下列代码是定义一个变量,此变量用以统计程序中新建MDI窗体的数量:Pr ivate iFor mCo unt As In tege r = 117.用下列代码替换Form1.vb中的MenuItem2的Click事件对应的处理代码,MenuItem2即为图01中的新建菜单项,下列代码的作用是在新建一个MDI窗体:Pr ivate Sub Menu Item2_Click ( ByVai sender As System.Object , ByVai e AsHan dies Menu Item2.ClickDim frmTemp As Form = New Form ()新建一个窗体frmTemp.MdiPa rent = Me为当前创建的窗体设置MDI父窗体frmTemp.Text = MDI 窗体+ iFormCount.ToString ()iFor mCo unt = iFor mCo unt + 1frmTemp.Show ()把此MDI窗体显示出来End Sub18.用下列代码替换Form1.vb中的MenuItem3的Click事件对应的处理代码,MenuItem3即为图08中的退出菜单项,下列代码的作用是退出应用程序:Pr ivate Sub Menu Item3_Click ( ByVai sender As System.Object , ByVai e As System.Eve ntArgs )Han dies Menu Item3.ClickApplicati on .Exit ()退出应用程序End Sub19.用下列代码替换Form1.vb中的MenuItem5的Click事件对应的处理代码,MenuItem5即为图09中的层叠显示菜单项,下列代码的作用是层叠排列窗体中的所有MDI窗体:Pr ivate Sub Menu Item5_Click ( ByVai sender As System.Object , ByVai e As Han dles Menu Item5.ClickMe.LayoutMdi ( MdiLayout.Cascade )层叠排列窗体中的所有MDI窗体End Sub20.用下列代码替换Forml.vb中的MenuItem6的Click事件对应的处理代码,MenuItem6即为图09中的水平平铺菜单项,下列代码的作用是水平平铺窗体中的所有MDI窗体:Pr ivate Sub Menu Item6_Click ( ByVal sender As System.Object , ByVal e As Han dles Menu Item6.ClickMe.LayoutMdi ( MdiLayout.TileHo rizo ntal )水平平铺窗体中的所有MDI窗体End Sub21.用下列代码替换Forml.vb中的MenuItem7的Click事件对应的处理代码,MenuItem7即为图09中的垂直平铺菜单项,下列代码的作用是垂直平铺窗体中的所有MDI窗体:Pr ivate Sub Menu Item7_Click ( ByVal sender As System.Object , ByVal e As Han dles Menu Item7.ClickMe.LayoutMdi ( MdiLayout.TileVe rtical )垂直平铺窗体中的所有MDI窗体End Sub22.用下列代码替换Forml.vb中的Menultem9的Click事件对应的处理代码,Menultem9即为图09中的排列图标菜单项,下列代码的作用是窗体中的所有MDI窗体排列图标:Pr ivate Sub Menu Item9_Click ( ByVai sender As System.Object , ByVai e AsHan dies Menu Item9.ClickMe.LayoutMdi ( MdiLayout.A rran gelco ns )窗体中的所有MDI窗体排列图标End Sub至此【MDI编程】项目的全部工作就完成了,图11、图12和图13是程序运行后的界面:图12:【MDI编程】运行界面之二图13:【MDI编程】运行界面之三此时我们注意到图13所示的窗口菜单中增加许多子菜单,而在程序设计时,并没有处理这些功能的代码。这是由于 第十一步中设置窗口菜单项的MdiList属性值为True造成的,可见正确的设置组件的属性值有时的确能够代替烦杂的 代码编写工作。五:总结:本文主要内容有二个,其一是介绍的在Visual Basic .Net定制不规则窗体的实现方法。在Visual Basic.Net中创建 不规则窗体主要使用的是Region类和GraphicsPath类。GraphicsPath主要是绘制窗体的形状,Region主要是以 GraphicsPath 来构建窗体。结合本文的实现思路和具体方法,我想对于其他形状的窗体,在掌握 GraphicsPath 类提供的 使用方法的前提下,加上对所要创建不规则窗体的规划设计,用Visual Basic .Net实现起来应该不算很困难。本文的另外一个主要内容就是介绍在Visual Basic .Net编写MDI应用程序的基本过程、技巧和注意事项。通过本文 的介绍可见Visual Basic.Net的MDI编程并没有什么复杂的地方,只需了解一些对MDI窗体处理的方法及其调用方式, 当然更重要的是要了解并掌握某些组件的针对MDI的属性及其设置方式。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 机械电气


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!