国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Visual Basic .NET 中動態加載類 (二)

2024-07-10 12:59:10
字體:
來源:轉載
供稿:網友
microsoft
步驟 3:創建配置文件以存放可用窗體

  應用程序在運行時需要的某些信息可能在編譯時無法提供,這些信息通常放置在配置文件中。在 visual basic 6.0 中,配置文件應該是 ini 文件或 windows 注冊表。而在 .net 中,則使用基于 xml 的配置文件。

  我們無法詳細介紹配置文件,因為這個主題非常復雜。但是,您應該知道,windows 窗體應用程序的配置文件與應用程序的 exe 啟動文件在同一個目錄中。配置文件的名稱與程序的 exe 啟動文件的名稱相同,只不過在 exe 文件名后添加了后綴 .config。這就是說,如果執行 myapp.exe 程序可啟動我的應用程序,則配置文件的名稱一定是 myapp.exe.config,而且配置文件必須與 myapp.exe 位于同一個目錄中。

  以下是示例中要使用的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configsections>
<section name="availableclasses" type="system.configuration.namevaluesectionhandler" />
</configsections>
<availableclasses>
<add key="placeholder – do not load"
value="dllpathnamegoeshere~nameoftypegoeshere"></add>
</availableclasses>
</configuration>

  此處,<availableclasses> 標記是占位符信息,便于人們看清格式。稍后,我們還會再返回來,為創建的新窗體添加配置信息。

  這實際上并不是存放窗體配置信息的理想方式,因為我們用符號分隔的方式在同一位置保存 dll 位置和類型名稱。但是,使用高級方法分別存放這些信息會要求相當多的注釋和代碼,所以我們暫且使用這種替代方法。

  使用某些文本編輯器或 xml 編輯器(或 microsoft visual studio®)創建上述配置文件,然后使用 formsonthefly.exe.config 文件名將其保存在 formsonthefly 項目的 /bin 目錄下。因為 .net 配置類使用區分大小寫的 xml 標記,所以創建此文件時,請注意 xml 標記中字母的大小寫。

  步驟 4:將配置信息讀入集合中
  我們為窗體編寫的代碼將使用 system.configuration 和 system.reflection 命名空間中的類。請將以下兩行代碼置于 form1 代碼的最頂端,以便更方便地訪問這些類:

  imports system.configuration
  imports system.reflection
  還需要一個模塊級變量來存放配置信息集合。請將以下代碼行緊挨著 inherits system.windows.forms.form 代碼行放在其下方:

  dim colavailableclasses as arraylist
現在,可以編寫核心代碼了。在 form1 的 form load 事件中放置以下代碼,以便讀取配置文件、創建存放信息的對象集合以及將集合數據綁定到組合框:

' 實例化配置信息集合。
colavailableclasses = new arraylist()
' 獲取要從配置文件中加載的可用項。
dim classconfigvalues as specialized.namevaluecollection
classconfigvalues = ctype(configurationsettings.getconfig("availableclasses"), _
specialized.namevaluecollection)

dim iindex as integer
dim slocation as string
dim sdescription as string
dim stype as string
dim svalue as string

' 創建可綁定到組合框的可用項的
' 集合。
for iindex = 0 to classconfigvalues.count - 1
sdescription = classconfigvalues.keys(iindex)
svalue = classconfigvalues.item(sdescription)

' 經過簡單的處理,從一個字段中
' 獲取位置和類型。
dim ipos as integer
ipos = instr(svalue, "~")
slocation = microsoft.visualbasic.left(svalue, ipos - 1)
stype = microsoft.visualbasic.right(svalue, len(svalue) - ipos)

dim objnewform as new dynamicclass(slocation, sdescription, stype)
colavailableclasses.add(objnewform)
next

' 現在,將集合綁定到組合框。
' 顯示說明,并返回對象的引用。
cboforms.datasource = colavailableclasses
cboforms.displaymember = "description"
cboforms.valuemember = "reference"


  步驟 5:插入邏輯以加載所選窗體   
現在,在 btnloadform 的 click 事件中放置以下邏輯:

dim objformtoload as dynamicclass
objformtoload = cboforms.selectedvalue
dim asmassemblycontainingform as [assembly] = _
[assembly].loadfrom(objformtoload.location)
dim typetoload as type = asmassemblycontainingform.gettype(objformtoload.type)
dim genericinstance as object
genericinstance = activator.createinstance(typetoload)

dim formtoshow as form = ctype(genericinstance, form)
formtoshow.mdiparent = me
formtoshow.show()


  這是程序的核心部分。通過使用集合中一個對象的信息實例化代碼并顯示窗體。讓我們逐行說明這段代碼。

  首先我們引用了其中包含要加載窗體的位置和類型的對象 (objformtoload)。它被設置為組合框的 selectedvalue 屬性,在從數據綁定的組合框返回所選內容時使用。

  dll 的位置包含在對象的 location 屬性中。assembly 類的 loadform 方法使用該屬性創建對程序集的引用。(將 assembly 類置于括號中是因為 assembly 是 .net 關鍵字。括號將通知編譯器,其中的內容不是正在使用的關鍵字,而是類名。)

  下面,我們需要引用正在加載的 .net 類型(類)??梢允褂贸绦蚣?gettype 方法,通過傳遞存放類型名稱(該類型名稱將從存放配置數據的對象的 type 屬性中獲?。┑淖址M行引用。對類型的引用保存在 typetoload 中。

  reflection 類和 activator 類使用它們的 createinstance 方法創建類型的實例。(createinstance 與 visual basic 6.0 中的 createobject 類似。)但是,實例必須是類型對象,因為該類型要動態加載。

  最后,新實例化的對象(實際上是一個窗體)必須轉換為正確的類型才能啟用前期綁定。我們知道它是一個窗體,所以可以使用 ctype 函數將其轉換為窗體。

  最后,將新窗體設置為 mdi 父窗體的子窗體并對其進行顯示。

注意:從 death of the browser?(英文)所示的 url 處加載的程序集被復制到本地緩存中。從 unc 加載的程序集(如本文中的程序集)僅在當前位置使用,不被復制到任何緩存中。
  步驟 6:編譯應用程序   
  現在,我們可以編譯應用程序,但由于尚未創建任何窗體,所以不會顯示任何窗體??梢跃幾g并運行程序,確保它能夠工作并確保組合框能夠正確加載占位符項。如果單擊 btnloadform,則會顯示錯誤信息或教程,因為配置文件中的信息還未指向任何對象。

  步驟 7:創建要顯示的窗體   
現在,開始創建名為 firstform 的新的 windows 窗體應用程序。在出現的空白 form1 上放置一些控件 - 控件類型不限。

  然后在 solution explorer(解決方案資源管理器)中的 firstforms 項目上單擊鼠標右鍵,選擇 properties(屬性)。在 output type(輸出類型)組合框中選擇 class library(類庫)。如果未看到組合框,可以在 solution explorer(解決方案資源管理器)的 solution(解決方案),而不是 project(項目)上單擊鼠標右鍵。

  現在開始創建項目。即創建一個包含該窗體的 dll。

  創建一個名為 c:/newforms 的目錄。將 firstforms.dll 從 firstforms 的 /bin 目錄復制到 c:/newforms 中。

  對名為 secondform 和 thirdform 的項目重復上述操作。在每個窗體中拖入不同的控件以便于區分。也可以將每個窗體的背景色更改為獨特的顏色。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柏乡县| 黄平县| 鸡东县| 克山县| 临江市| 新余市| 武冈市| 太仓市| 庆阳市| 永城市| 波密县| 五大连池市| 衢州市| 革吉县| 镇坪县| 宁晋县| 焉耆| 双牌县| 吉安县| 平凉市| 布拖县| 来凤县| 襄城县| 抚顺市| 阳信县| 南陵县| 枝江市| 门头沟区| 恩施市| 颍上县| 中牟县| 仁寿县| 北票市| 四平市| 阿鲁科尔沁旗| 迁安市| 哈密市| 澄城县| 平乡县| 原阳县| 夏邑县|