Visual Basic .NET 中动态加载类(一)

visual|动态|加载

Visual Basic .NET 中动态加载类

· ··Microsoft

 摘要:理想情况下,编写软件系统之前我们就应该知道此软件系统需要完成哪些操作。但实际情况并非如此,因此我们的系统应该是可以调整的。

  最能体现这种适应性的是动态集成新功能的能力。例如,在 Windows 窗体应用程序中,这种能力是指加载编译原始应用绦蚝芫靡院蟠唇ǖ拇疤宓哪芰Α?/P>

  这种操作在 Microsoft Visual Basic 6.0 中几乎是不可能的,但是在 Visual Basic .NET 中却相当容易。利用 System.Reflection 命名空间的功能,程序只需知道程序集的位置即可请求动态加载该程序集。然后即可加载该程序集中的类并对类进行实例化。由于 Windows 窗体也是一种类,这就意味着可以动态地加载、显示和使用窗体,即使在编译原始程序时窗体并不存在。

  典型的方案
  假设我们有一个多文档界面 (MDI) 应用程序,需要具有将任意窗体加载为子窗体的能力。那么应用程序应该能够执行以下操作:

获取可以加载的窗体的列表,通常不在 .NET 配置文件中。
显示该列表并允许用户从中选择一个窗体。
实例化并显示用户选择的窗体。
  让我们编写这样一个应用程序,看看如何完成动态加载。

  步骤 1:创建项目和 MDI 窗体
  启动一个新的 Windows 窗体项目。将其命名为 FormsOnTheFly。在新项目中包含的空窗体 Form1 中,将它的 IsMdiContainer 属性更改为 True。这样,该窗体即变成一个 MDI 父窗体。更改窗体的大小,使窗体的长和宽的尺寸大约为默认值的两倍。

  将一个面板控件拖动到窗体上,然后设置它的 Dock 属性,使它靠接在窗体的顶部。更改面板的大小,使它的高度大约为 0.5 英寸。

  将一个组合框拖动到面板上。将它命名为 cboForms,然后将它的 DropDownStyle 设置为 DropDownList。

  最后,将一个按钮拖动到面板上。将它命名为 btnLoadForm,然后将它的 Text 属性设置为 Load Form。

  此时,Form1 应如图 1 所示。

图 1:添加所有控件后处于设计模式下的 MDI 窗体

  步骤 2:生成一个类,以存放可用窗体的数据
  我们将获取可能从基于 XML 的配置文件之外加载的窗体的有关信息。但是,为了更便于在组合框中显示可用窗体并获取有关所选窗体的信息,还应建立一个对象集合。集合中的每个对象都将存放一个可用窗体的信息。对象应具有以下属性:

Description:显示在组合框中的窗体说明。
Location:窗体所在的 DLL 的文件名。
Type:窗体的 .NET 类型的名称(例如,MyProject.Form1)。
  这样的集合可以数据绑定到列表框中。要从列表框中返回对所选对象的引用,还需要一个属性,我们称之为 Reference。

  要创建类,请选择 Project | Add Class(项目|添加类),然后将类命名为 DynamicClass.vb。在类中添加以下代码:

Public Class DynamicClass
Dim msLocation As String
Dim msType As String
Dim msDescription As String

Public Sub New(ByVal sLocation As String, _
ByVal sDescription As String, _
ByVal sType As String)
Me.Location = sLocation
Me.Description = sDescription
Me.Type = sType
End Sub

Public Property Location() As String
Get
Return msLocation
End Get
Set(ByVal Value As String)
msLocation = Value
End Set
End Property

Public Property Type() As String
Get
Return msType
End Get
Set(ByVal Value As String)
msType = Value
End Set
End Property

Public Property Description() As String
Get
Return msDescription
End Get
Set(ByVal Value As String)
msDescription = Value
End Set
End Property

Public ReadOnly Property Reference() As Object
Get
Return Me
End Get
End Property
End Class

时间: 2024-08-08 16:05:54

Visual Basic .NET 中动态加载类(一)的相关文章

Visual Basic .NET 中动态加载类 (三)

visual|动态|加载 ··Microsoft 步骤 8:用新的窗体信息更新配置文件 现在,我们已经创建了一些新窗体,还需要在配置文件中引用它们.请用以下代码行替换 FormsOnTheFly.exe.config 中的占位符信息: <add key="First Form" value="C:\NewForms\FirstForm.dll~FirstForm.Form1"></add><add key="Second Fo

Visual Basic .NET 中动态加载类 (二)

visual|动态|加载 Microsoft 步骤 3:创建配置文件以存放可用窗体 应用程序在运行时需要的某些信息可能在编译时无法提供,这些信息通常放置在配置文件中.在 Visual Basic 6.0 中,配置文件应该是 INI 文件或 Windows 注册表.而在 .NET 中,则使用基于 XML 的配置文件. 我们无法详细介绍配置文件,因为这个主题非常复杂.但是,您应该知道,Windows 窗体应用程序的配置文件与应用程序的 EXE 启动文件在同一个目录中.配置文件的名称与程序的 EXE

Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类 定义接口 package loader; public interface HelloIface {     public String hello();          public String sayHi(String name); } 实现接口 在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar package loader; public class HelloImpl impleme

flash as3 中动态加载库类失败解决方法

flash as3 中动态加载库类失败解决方法 这是错误的写法 for (var i:number=1; i<4; i++) { var mc1:mc1 = new mc1(); addchild(mc1); } as3里怎么循环加载库里的mc1 mc2 mc3类 就是下面意思是怎样个的写法 for (var i:number=1; i<4; i++) { var "mc"+i:"mc"+i = new "mc"+i(); addch

动态加载类的原理——元数据的使用

动态|加载|数据 在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息. 在System.Reflection中有这样一个class----Assembly,我们可以通过它来加载一个装配件.方法如下: Assembly assm=Assembly.LoadFrom(fileName); 其中filename是要加载的装配件的文件名称(带路径). 接下来,我们就可以通过使用Sys

从XML中动态加载菜单的示例

本文配套源码 这个案例是一个基于VS2005的WinForm菜单控件的例子,功能是从XML中动态加载菜单数据到MenuTrip控件上.这个案例中用到了XML,反射之类的技术.当然实用价值有限,仅供学习参考之用. 首先创建一个WinForm项目,在Form1上放置一个MenuTrip控件,将其命名为MainMenu. 在项目中添加一个XML文件,命名为Menu.xml,代码如下: MenuXml 1<?xml version="1.0" encoding="utf-8&q

在ASP.NET中动态加载内容(用户控件和模板)

asp.net|动态|加载|控件|模板 在ASP.NET中动态加载内容(用户控件和模板)要点:1. 使用Page.ParseControl2. 使用base.LoadControl第一部分:加载模板 下面是一个模板"<table width=100%><tr><td width=100% colspan=2 runat=server id=ContainerTop></td></tr><tr><td width=30%

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

反射 学习笔记之动态加载类

1 Class.forName("类的全名")不仅表示了类的类类型,还代表了动态加载类 2 编译时刻加载类称之为静态加载,运行时刻加载类是动态加载类 3 new 对象是静态加载类,在编译时刻就需要加载所有的可能使用的类(编译时刻加载) 用Edit写一个reflectDemo2,里面有俩个命令行参数判断的代码word,execl,我们在同一个文件夹下写一个word类不写execl类,我们假如只想运行word不想运行execl,但是很不幸,由于这是静态加载,javacreflectDemo