"Property can only be set to Nothing.")
End If
Dispose__Instance__ (Of Form1)(m_Form1)
End Set
End Property
End Class
Create__Instance__() 函数负责按需创建窗体的实例。它会检查窗体(存储在 m_Form1 中)是否已被实例化。如果窗体已被实例化,便会返回该窗体。否则,会创建并返回一个实例。Create__Instance__() 还会捕获递归窗体创建尝试。Dispose__Instance__() 负责关闭该窗体。
My.Forms 还提供了重新引入窗体的默认实例的方法,您可能在较早版本的 Visual Basic 中熟悉该方法。默认实例使得在不必先显式创建窗体的实例的情况下引用窗体的实例成为可能。
例如,在 Visual Basic 6.0 中,作为替代,您可能已经编写了 Form1.Show():
Dim Form1Instance as Form1
Form1Instance = new Form1
Form1Instance.Show()
由于 Visual Basic 2005 中的编译器利用 My.Forms 来创建默认实例,因此,您可以仅编写 Form1.Show()。
My.WebServices
人们在针对 Web 服务进行编码时遇到的困难之一是确定针对哪个类来进行编码。My.WebServices 省去了该确定过程并按需提供了 Web 服务代理的实例。
My.WebServices 最适用于同步调用 Web 服务。所生成的用以提供 Web 服务代理的实例的代码模式与所示的用以返回窗体的实例的代码模式相同。
My.Settings
Visual Basic 2005 中的新功能是 Settings 设计器,它可让您以应用程序或用户为基础指定应用程序设置。该设计器创建了一个类,您可以使用该类以强类型的方式访问您的设置。通过在解决方案资源管理器中显示所有文件并在 MySettings.Settings 节点下查找 MySettings.VB 文件,您可以看到 MySettings 类的一个示例。
以下为所生成的用以管理名为 SampleUserSetting 的应用程序设置的属性示例:
Partial NotInheritable Class MySettings
Inherits System.Configuration.ApplicationSettingsBase
<System.Diagnostics.DebuggerNonUserCode(), _
System.Configuration.UserScopedSettingAttribute(), _
System.Configuration.DefaultSettingValueAttribute("Try Me")> _
Public Property SampleUserSetting() As String
Get
Return CType(Me("SampleUserSetting"),String)
End Get
Set
Me("SampleUserSetting") = value
End Set
End Property
End Class
生成的类可为您做所有繁重工作。要访问该设置,您只需键入以下内容:
My.Settings.SampleUserSetting
My.Resources
Visual Basic 2005 中的另一项新功能是 Resource 设计器,它使您能够向应用程序中添加资源。Resource 设计器还会创建一个模块,您可以使用该模块以强类型的方式访问您应用程序中的资源。例如,如果您向项目中添加名为 Smiley 的位图,则可以使用 My.Resources.Smiley 访问该位图。通过在示例项目的解决方案资源管理器中显示所有文件并在 MyResources.resx 节点下查找 MyResources.vb 文件,您可以看到生成的资源模块的一个示例。
以下为所生成的用以返回 Smiley 资源的工厂属性的示例项目的一个示例:
Public ReadOnly Property Smiley() As System.Drawing.Bitmap
Get
Return CType(ResourceManager.GetObject("Smiley", _resCulture),_
System.Drawing.Bitmap)
End Get
End Property
所生成的强类型资源模块处理区分大小写的资源 ID,使用 System.Resources.ResourceManager 类检索您的资源,并管理与获取为应用程序正确创建的 ResourceManager 相关的详细信息。
要在 Visual Basic 2002 或 Visual Basic 2003 中访问相同的 Smiley 位图,您首先要将该位图放入 .resx 文件中,而该操作是很困难的。另一个方法是将它作为嵌入资源放入项目中,并且必须牢记在将要成为嵌入资源的资源的属性网格中更改生成操作。这样,您编写的代码应该如下所示:
Dim CurrentAssembly As Reflection.Assembly = _
Reflection.Assembly.GetExecutingAssembly
Dim BitMapStream As IO.Stream = _
CurrentAssembly.GetManifestResourceStream( _
"WindowSAPplication2.Smiley.bmp")
Dim SmileyBitmap as Drawing.Bitmap = New Bitmap(BitMapStream)
该段代码中有一些重要的详细信息是您所必需了解的。您必须知道获取当前正在执行的程序集,并在其上调用 GetManifestResourceStream()。您必须牢记使用根命名空间名称来限定资源名。您必须获取大小写权限,这是因为传递给 GetManifestResourceStream() 的名称是区分大小写的。您必须知道在何处定义流类,这样您可以在流对象中捕获 GetManifestResource 的返回值。您必须知道如何从流创建位图。由于上述问题之一,在试图判断 BitMapStream 为什么总是返回 Nothing 时,您可能会遇到挫折。
Visual Basic 2005 通过提供 Resource Editor 解决第一个问题,使用 Resource Editor 可以很容易地将新的或现有资源放入 .resx 文件中。然后,可以使用 My 很容易地访问这些资源。您只需编写以下内容:
Dim SmileyBitmap as Drawing.Bitmap = My.Resources.Smiley
线程处理
My 中可用的类实例是通过缓和线程处理问题的方式公开的,因为 My 对象的实例是逐线程提供的。即,线程 1 上返回的 My.Computer 的实例不同于线程 2 上返回的 My.Computer 的实例。这意味着当使用 My 对象时,您不必编写同步代码。
在 Web 应用程序中,从 My 返回的实例是根据请求存储的。
小结
我们已经研究了 My 如何公开 .NET Framework 类以及如何生成动态生成的类以补充 My。
最后,My 可以减少您必须编写的代码行数,并提供对常用功能的访问。它以有效、可靠且线程安全的方式实现这一目的。在程序员工作效率显得尤为重要的环境中,My 可以帮助您更加快速有效地完成工作。
上一篇: 用VB实现用户登录密码的修改
下一篇: 再谈VB程序的加密
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




