分类: C/C++
2008-04-01 09:05:07
本文内容基于 Microsoft Visual Studio 2005 发布前的版本,原来代号为“Whidbey”。本文所包含的全部信息都可能改变。 本文使用了以下技术:Visual Basic 2005 和 .NET Framework Dim sr As New IO.StreamReader("c:\mytextfile.txt") contents = sr.ReadToEnd sr.Close() 它不需要太多的代码,但是它当然也不直观。对许多人来说,使用 StreamReader 途径将导致他们在该代码段结束之前遍历 Stream 类,FileStream 类,及更多的其它类。完全相同的代码在 Visual Basic 2005 中将会运行得很好,但用 My 来获得相同的信息要快得多,象下面这样写: contents = My.Computer.FileSystem.ReadAllText("c:\mytextfile.txt") My.Computer.FileSystem 只是包含在 My 语言扩展中许多类中的一个,因此首先我们要熟悉什么是可以利用的? Dim winINIFile As String Try winINIFile = My.Computer.FileSystem.ReadText("c:\windows\wind.ini") Catch ex As IO.FileNotFoundException My.Application.Log.WriteException(ex, "Error Accessing INI File") End Try Visual Basic 6.0 和更早版本的用户当时讨论得出的更普通的特色要求之一便是加入了 OpenForms 集合。在 Visual Basic 6.0 中通过关键字“Forms”这个集合是可获得的,为你提供了一种简单的方法来循环遍历应用程序中当前所有打开的窗体,不用费力去维护自己的全局 窗体清单,如这里所示: For Each f As Form In My.Application.OpenForms Debug.WriteLine(f.Text) f.WindowState = FormWindowState.Minimized Next My.Computer 和 My.User Dim myPics As String = _ My.Computer.FileSystem.SpecialFolders.MyPictures.Path My.Computer.FileSystem.CopyFolderContents( _ "C:\Desktop Wallpaper", myPics, False, True) MsgBox( My.Computer.FileSystem.GetFiles( _ myPics, "*.jpg", "*.bmp").Count) 在.NET Framework 1.1中为了完成相同的文件拷贝将需要更多一些的代码(参见 Figure 1): ''''''''Figure 1 在 .NET Framework 1.1 中拷贝文件''''''''''并且此代码还没有包含显示进度条功能,你要自己创建你自己的进度条。 My.Computer.Ports(在 Visual Studio 2005 的 PDC 预览中并不可用)将串口读写操作变成一个简单过程。这是运用现行版本的 .NET 框架最为普通和难以实现的任务之一。这里显示的一小段代码以前用了一整篇文章 来构建!( 参见 。) Dim comport As IO.Ports.SerialPort comport = My.Computer.Ports.OpenSerialPort("COM1") AddHandler comport.ReceivedEvent, AddressOf DataReceived My.Computer.Audio 类允许你播放自定义的或系统的声音,终结了 P/Invoking 的 PlaySound API 的使用,如这里所示: Dim musicFile As String musicFile = My.Computer.FileSystem. _ GetFiles("C:\WINDOWS\Media", "*.wav")(0).Path My.Computer.Audio.Play(musicFile) My.Computer.Network 使得各种广泛的网络调用变得容易,包括接收和发送 Pings(试通程序)到远程机器,上传或下载文件,确定是否 联接,如此等等。 If My.Computer.Network.IsConnected Then If My.Computer.Network.Ping("") Then Debug.WriteLine("Site Available") My.Computer.Network.DownloadFile( _ "http:///Articles/", _ My.Computer.FileSystem.SpecialFolders.MyDocuments, _ ShowProgress:=True) End If End If 在 Windows Forms 命名空间中,My.Computer.Printer 和新的 Printing 类一起工作使得打印工作易如反掌。作为一个例子,制作一个如图 Figure 2 所示的报表,以前得动用那些熟悉 GDI+ 编程的人来实现。这里是开始的几行代码: With My.Computer.Printers.DefaultPrinter .HorizontalAlignment = HorizontalAlignment.Center .WriteLine("Document Title") .WriteImage(New Bitmap("z:\msdn-logo.gif")) .HorizontalAlignment = HorizontalAlignment.Left .Write("Company Name") .HorizontalAlignment = HorizontalAlignment.Right .WriteLine("Report Title") .WriteHorizontalLine(0.05) .WriteLine() ... 如果你想知道使用 Framework 1.1 制作同样类型的报表要涉及到写什么,你可以看看我在 MSDN 在线上(MSDN® Online)一篇有关打印的技术文章:“”。 If My.User.IsAuthenticated Then If My.User.IsInRole("BUILTIN\Administrators") Then MsgBox("tsk, tsk... running as Admin are we?") End If End If 注意 My.User 的属性和方法默认使用 Windows 认证,但是它同时也将和自定义的安全低层结构很好地无缝接合,以保持相同编码模式与所使用的认证类型 无关。 Dim lastRun As Date lastRun = My.Settings.LastRun My.Settings.LastRun = Now() Dim myMessage As String = _ String.Format(My.Resources.LastRunMessage, _ lastRun.ToShortDateString) MsgBox(myMessage) 除了刚才描述的两个方面以外,项目中的所有窗体都可以通过 My.Forms 获得,并且任何在项目中引用的 Web 服务都通过 My.WebServices 类 公开。对于 Web 服务,这意味着你具备直接引用它们的选择权而不用手工建立实例。因此,从 xmethods.com 添加一个引用到 TemperatureService 后,你可以用下面的代码 获取当前的温度: Dim tempService As New net.xmethods.() MsgBox(tempService.getTemp("98052"))这可以更加简单地表示成: MsgBox(My.WebServices.TemperatureService.getTemp("98052")) My.Forms 与我早先讨论的 My.Application.OpenForms 集合有所不同,因为 My.Forms 公开每个Form 类的一个默认实例,而不是这些类的当前打开的实例。如果你有 Visual Basic 6.0 或更早版本的编程背景,这些默认实例将对你来说是绝对有用的,因为它们使你能显示、隐藏或使用 Form 类名直接存取窗体: Private Sub showForm2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles showForm2.Click My.Forms.Form2.Show() End Sub Private Sub updateForm2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles updateForm2.Click My.Forms.Form2.Text = "Updated..." End Sub 这在 .NET 框架发布之前的 Visual Basic 中是标准行为,并且对那些已经熟悉 Visual Basic 6.0 编程方式的开发者来说,它将是一个令人欢迎的回归。 |
作者简介 Duncan Mackenzie 是 MSDN Online 的 Visual Basic 和 C# 内容的战略家,是 MSDN 中 “Coding 4 Fun”专栏的作者以及多本关于 Visual Basic 和 .NET 书籍和文章的作者。你可以通过 与 Duncan 联系取得。 |