VBNET中几种高级窗体技术的应用_第1页
VBNET中几种高级窗体技术的应用_第2页
VBNET中几种高级窗体技术的应用_第3页
VBNET中几种高级窗体技术的应用_第4页
VBNET中几种高级窗体技术的应用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VB.NET中几种高级窗体技术的应用1引言:VB.NET中的窗体(Form类)相对于VB6而言,功能已变得十分强大,很多在VB6中需要通过API函数或复杂的编程才能完成的功能,.NET中只需要设置窗体属性或几行简单代码即可实现。本文将从实际编程的角度出发,介绍几种VB.NET中的高级窗体技术,包括子类派生、异形窗体及透明效果、本地化窗体、动态控件属性等技术的应用。2窗体子类派生技术像限制窗体大小、判断窗体的移动等功能,在VB6编程中需要利用子类派生技术来实现,而在.NET中,很多窗体新增的属性、事件即可完成这些任务。但有时仍然需要使用子类派生,例如:程序中要用到一个不带标题栏的窗体,通过鼠标在窗体上任何位置的拖动来改变窗体位置。窗体对象的子类派生技术依赖于继承机制。System.Windows.Forms.Form类公开了WndProc方法,该方法被Windows发送到窗体的每条消息调用。由于WndProc方法被定义为Protected和Overridable,所以在窗体的派生类中可以重写它。通过重写此方法,就可以重新定义窗体的行为。WinProc方法接收一个Message对象参数,此对象包括5个属性:Msg(消息的ID)、HWnd(窗口的句柄)、Wparam和Lparam(传递给窗口的参数,取决于具体的消息)、Result(返回给操作系统的值)。在重写WinProc方法时,首先应调用其基类的默认处理方法,进行一般消息的处理工作,然后检查该消息的Msg属性,并决定如何响应某些特殊消息。多数情况下,我们只需根据消息给出相应的提示,但在某些时候,需要将特定的值赋给消息的Result属性并返还给Windows,达到“欺骗”Windows的目的。例如,下面的代码捕获了WM_ACTIVATEAPP消息,判断窗体是否被激活并显示提示;捕获WM_NCHITTEST消息,将HTCLIENT值(代表鼠标位于窗体的工作区)改为HTCAPTION值(代表鼠标位于窗体的标题栏中)赋给Result属性,以实现拖动,如图1。(图1:窗体子类派生)PublicClassFormlInheritsSystem.Windows.Forms.Form#Region"Windows窗体设计器生成的代码"PrivateConstWM_NCHITTESTAsInteger=&H84PrivateConstWM_ACTIVATEAPPAsInteger=&H1CPrivateConstHTCAPTIONAsInteger=2PrivateConstHTCLIENTAsInteger=1'定义消息ProtectedOverridesSubWndProc(ByRefmAsMessage)MyBase.WndProc(m)'调用基类的WinProc方法处理消息SelectCasem.MsgCaseWM_ACTIVATEAPPIfm.WParam.ToInt32<>0ThenLabell.Text="窗体被激活!"ElseLabel1.Text="窗体被停用!"EndIf'窗体被激活时,WParam属性返回一个非零值CaseWM_NCHITTEST'鼠标位于窗体上方时发送WM_NCHITTEST消息Ifm.Result.ToInt32=HTCLIENTThenm.Result=NewIntPtr(HTCAPTION)'修改消息值EndIfEndSelectEndSubEndClass此外,我们还可捕获系统颜色改变、字体改变、窗体大小调整、Windows会话关闭等消息并进行处理。要详细了解Msg、LParam和Wparam等属性,读者可阅读MSDNLibrary中的PlatformSDK文档。3异形窗体及透明效果窗体具有一对十分有趣的属性:Transparencykey和Opacity。如果将某种颜色值赋给Transparencykey属性,则窗体上此种颜色覆盖的区域将被处理成透明的,并且不能被绘制。用户在这些地方单击,会激活后面的窗体。因此我们只要使用不同于Transparencykey属性的颜色值在窗体上绘制图形,就可创建出形状奇异的窗体,如三角形、圆形甚至五角星形的窗体。可以利用GDI+在窗体上绘制图形,也可通过任何的图形软件(如画图)来创建一个位图,再将该位图加载到窗体的BackgroundImage属性。如果把窗体的FormBorderStyle属性设置为None,去掉标题栏和边框,会获得更好的效果。PrivateSubForm1_Paint(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.PaintEventArgs)HandlesMyBase.PaintMe.TransparencyKey=Color.Blue'定义蓝色为透明色DimbAsNewSolidBrush(Me.BackColor)'创建与窗体背景色同色的画笔对象e.Graphics.FillRectangle(Brushes.Blue,Me.ClientRectangle)'用蓝色画一个覆盖窗体的矩形e.Graphics.FillEllipse(b,Me.ClientRectangle)'用背景色画一个实心椭圆e.Graphics.FillRectangle(Brushes.Blue,100,100,230,100)'用蓝色在椭圆内画一个较小的矩形e.Graphics.DrawEllipse(Pens.Black,Me.ClientRectangle)'为椭圆加一条黑色的边框b.Dispose()'取消画笔对象EndSubPrivateSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimopAsDoubleForop=Me.OpacityTo0Step-0.005Me.Opacity=opNext'实现窗体淡出效果MessageBox.Show("再见!”)EndEndSub显然,不管如何定义窗体,都应向用户提供关闭和移动窗体的功能。所以应准备一个按钮用于关闭窗体,并结合前面介绍的窗体子类派生技术实现移动。Opacity属性是一个0到1范围内的Double型数值,代表了整个窗体的透明性:为1时,窗体表现为正常状态;为0时,窗体完全透明。可以将该属性用于淡入淡出等特殊效果。本例中,我们建立了一个椭圆形且中空的窗体,单击按钮后,窗体会逐渐透明变淡,最终消失,如图2。(图2:异形窗体)4本地化窗体当我们需要开发一个支持多语言界面的软件时,传统的方法是使用资源文件,再编写提取各个字符串(或图像)并应用到界面中的代码,显然这种方式很难实现快速应用程序开发。在VB.NET中,窗体设计器用一种简洁高效的方法解决了这个问题。图3所示的窗体是程序的中文界面(默认语言),包括一些中文字符串和一幅图片。在完成后,我们就可以对应设置其英文(或其他语言)的界面。(图3:本地化窗体中文)

在属性窗口将窗体的Localizable属性设为True,表示要为窗体生成本地化代码。接下来将窗体的Language属性设置为希望支持的语言类型(如英语),如图4所示。皆Lau指矛Accep+ButtonC:diLcelEiittcirLKeyFrevi郁L-:属性设置)L:irLgiiage英语辟建宜共和园}英语血勒比海)英语血掌犬:)英语n聿巴布韦)ImeMode日杂咬英语皆Lau指矛Accep+ButtonC:diLcelEiittcirLKeyFrevi郁L-:属性设置)L:irLgiiage英语辟建宜共和园}英语血勒比海)英语血掌犬:)英语n聿巴布韦)ImeMode日杂咬英语(图5:本地化窗体英文)本地化窗体的最大好处在于大多数情况下可以不去考虑它们,用户像运行一个普通程序一样对待本地化窗体程序。如果用户的系统语言与已定义的某种语言匹配,则程序窗体和控件将自动使用为该语言所作的设置,否则,使用默认设置。本地化窗体的测试是一个问题:在一台电脑上安装多套系统是很麻烦的。较简单的方法是更改UI线程的区域设置,将适当的Cultureinfo对象赋给Thread.CurrentThread对象的CurrentUICulture属性来实现。我们需要在窗体的New()过程中设置它(打开"Windows窗体设计器生成的代码",在New过程中添加如下语句):PublicSubNew()MyBase.New()System.Threading.Thread.CurrentThread.CurrentUICulture=NewSystem.Globalization.CultureInfo("en-US")‘设置语言区域为英语(美国)InitializeComponent()EndSub运行时,用不同的区域代码初始化窗体,窗体将自动以匹配的效果显示。区域代码(如"en-US")可在MSDN中查得。5动态控件属性请看图6所示的窗体:一个用于同数据库进行连接的登录对话框。为了便于用户的操作,在编程时已预定义了服务器名和用户名。很显然,如果采用给控件属性直接赋值的方法,开发者需要为每个用户重新

编译程序,这几乎是不可能的。在.NET之前,一般用.ini文件实现此目的,而.NET中通过配置文件的动态属性,提供了一种更标准的解决方案。(图6:动态控件属性窗体)设计窗体时,选择需要设置动态属性的控件(如TextBoxl),在“属性”窗口中展开DynamicProperties项,单击Advanced项旁的省略号按钮,会出现如图7所示的对话框。(图7:设置动态属性的对话框)找到并选择希望设为动态的属性(如本例中的Text属性),确定后,.NET会自动为程序创建一个配置文件“app.config”(文本文件),在文件的<appSettings>部分,包含了设置好的控件属性名及对应的属性值。程序运行时,这个值将被读出并作用在控件的动态属性上。编译程序后, ^企目录下会出现“程序名.exe.config”配置文件,用记事本打开并修改相应的属性值,即可实现动态控件属性效果,如图8。当然,最好是在程序中由用户来决定控件的动态属性值,编程者利用文件操作修改配置文件中的属性值。文件实文件(!)编辑©格式(Q)查看@)帮助冬)文件实文件(!)编辑©格式(Q)查看@)帮助冬)eloa)0白臼臼白臼臼0臼田ffiffiffiffiffiffiffiffiffia0FFICE2000PhotoCapTestDelphiTestSTestWToolVBBookVBProgram.FileTreeView『弓FileWatcher『七Fi1eWatcherPanel田ffia本地化窗体e色动态控件届性tjpbina£3objE国分页王im异形窗体及透明效果<?xinlversion=//l.0〃encodings<configuration><appSettings><!— 改处显示用户应用程序利配置的属性设最-><I一一 不依":<addkey=//settingNaine//value=se11ingValue/>一一><addkey=??TextBoxl.Text"value=//SQLServerl>y/><addkey=/?TextBox2.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论