欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VB怎樣動(dòng)態(tài)加載ActiveX控件
熟悉VB的朋友對使用ActiveX控件一定不會(huì )陌生,眾多控件極大地方便了編程,但唯一的缺陷是不能動(dòng)態(tài)加載控件,必須在設計時(shí)通過(guò)引用,將控件放置在窗體上。VB6.0已能夠解決該問(wèn)題,只是幫助中沒(méi)有明確說(shuō)明,并且沒(méi)有描述到一些關(guān)鍵功能,由于以前的版本中可以動(dòng)態(tài)創(chuàng )建進(jìn)程外服務(wù):如果對象是外部可創(chuàng )建的,可在 Set 語(yǔ)句中用 New 關(guān)鍵字、CreateObject 或 GetObject 從部件外面將對象引用賦予變量。如果對象是從屬對象,則需使用高層對象的方法,在 Set 語(yǔ)句中指定一個(gè)對象引用:

Dim xlApp1 As Excel.Application
Set xlApp1 = New Excel.Application

Dim xlApp As Object '定義存放引用對象的變量。
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True

這些語(yǔ)法很容易造成誤導,以為動(dòng)態(tài)加載ActiveX控件也是此方法,可能有朋友也象我一樣利用CreateObject嘗試了無(wú)數次,卻無(wú)功而返,不知微軟公司是出于何種考慮,動(dòng)態(tài)加載ActiveX控件是擴展控件集合的方式實(shí)現,通過(guò)實(shí)際摸索,終于就如何實(shí)現動(dòng)態(tài)ActiveX控件找出了一條切實(shí)可行的方法,下面以一個(gè)具體的實(shí)例來(lái)詳細說(shuō)明。
一、ActiveX控件

ActiveX 控件是 Visual Basic 工具箱的擴充部分。使用 ActiveX 控件的方法與使用其它標準內裝的控件,如 CheckBox 控件,完全一樣。在程序中加入 ActiveX 控件后,它將成為開(kāi)發(fā)和運行環(huán)境的一部分,并為應用程序提供新的功能。

ActiveX 部件通過(guò)客戶(hù)端/服務(wù)器關(guān)系與應用程序— 及與部件相互之間— 交互作用??蛻?hù)端是使用部件功能的應用程序代碼或部件。服務(wù)器是部件及其關(guān)聯(lián)的對象。例如,假設應用程序使用 ActiveX 控件來(lái)提供一個(gè)標準的雇員窗體,供公司的多種應用程序使用。提供雇員窗體的 ActiveX 控件就是服務(wù)器,使用這個(gè)控件的應用程序就是服務(wù)器的客戶(hù)端。

二、加載方法

VB6.0 中對Controls 集合進(jìn)行了擴展,以前版本中Controls 集合在窗體上列舉出已加載的控件,這在迭代過(guò)程中是很有用的。Controls 集合標識一個(gè)叫做 Controls 的內在窗體級變量。如果忽略可選的 object 所在處的整數,則關(guān)鍵字 Controls 必須包括在內。我們通常在窗口中使用如下代碼:

Text1.Text="Hello, world"
其實(shí)也可以使用如下代碼達到同一目的:
Controls(1).Text="Hello, world"

在VB6.0中除了原來(lái)的Clear、Remove 方法外(很奇怪,為什么微軟在VB5.0中只提供這兩種方法,而沒(méi)有提供Add方法,因為沒(méi)有Add,這兩種方法也就沒(méi)什么用處),增加了Add方法,該方法就是用于動(dòng)態(tài)加載控件的:
Controls.Add(progid as String, Name as String);
progid: ActiveX部件的ProgID,如:"VB.CheckBox";
Name:ActiveX部件加載后的名稱(chēng),如: "MyCheckBox";

若要在窗體上添加一個(gè)名為MyButton的按鈕,可以使用:
dim oControl as Object '窗體級變量
注意:這里聲明為Object對象類(lèi)型
Private Sub LoadControl()
Set oControl = Controls.Add
("VB.CommandButton", "MyButton")
     oControl.Left = 10
     oControl.Top = 10
     oControl.Visible = True '使控件可見(jiàn)
End Sub

這是VB6.0的標準語(yǔ)法,它在例程中也是如此演示的,不過(guò)該方法雖然現實(shí)了控件的動(dòng)態(tài)加載,按鈕顯示在窗體上,可以象普通按鈕一樣按下去,但加載的控件不能預先設計響應事件代碼,如:事件Sub MyButton_Click()將是非法的,當然,可以將要響應的事件封裝在控件內部。就編程的觀(guān)點(diǎn)來(lái)看該方法沒(méi)什么大的用處,開(kāi)發(fā)ActiveX控件的目的是為了資源共享,為了被其他開(kāi)發(fā)人員利用,所以要提供必要的事件接口,顯然利用該方法不行,通過(guò)分析 VBControls等相關(guān)對象,找出VBControlExtender對象與EventInfo相結合能提供事件陷井捕捉, VBControlExtender對象對動(dòng)態(tài)添加控件特別有用,它提供了一套通用的屬性、方法、事件給開(kāi)發(fā)人員,它的一個(gè)突出特點(diǎn)是能編程設計控件的事件,熟習類(lèi)編程的朋友對帶事件的對象聲明一定不會(huì )陌生:
Dim WithEvents objElemt as CElemtVBControlExtender 也不例外,聲明的語(yǔ)法一樣,只不過(guò)它有個(gè)特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到對象使用 RaiseEvent產(chǎn)生的所有事件,EventInfo數據結構映射了事件的名稱(chēng)、參數個(gè)數和參數的值。VBControlExtender和   EventInfo相結合,采用Select Case 就可以預先將不同類(lèi)對象的事件放置一起,各自獨立運作。將上面的代碼改寫(xiě)一下就能提供 Click事件了:

Dim WithEvents oControl As VBControlExtender '帶事件聲明聲明之后您就可以在代碼窗口的左上角的對象下拉框中發(fā)現該對象出現了,也就是說(shuō),該對象有了事件或方法了,它的事件有DragDrop,DragOver , LostFocus ,GotFocus ,ObjectEvent和Validate,其中ObjectEvent是通用的事件捕捉。

Private Sub LoadControl()
    Set oControl = Controls.Add
("VB. CommandButton", "MyButton")
    oControl.Visible = True
End Sub

Private Sub oControl_ObjectEvent(Info As EventInfo)
   Select Case Info.Name
    Case "Click" 'Click事件
'您可以添加處理Click事件代碼
MsgBox "您按了MyButton!"
    Case Else ' 其他事件
       ' Handle unknown events here.
    End Select
End Sub

當然對微軟提供的標準控件能采用該方法添加,大家都不會(huì )懷疑,但自己開(kāi)發(fā)的控件也能嗎?答案是肯定的,我們可以用一個(gè)實(shí)際的例子進(jìn)行說(shuō)明。
三、實(shí)例描述

假設一個(gè)本地網(wǎng)絡(luò )的監控系統,需要在原理圖與實(shí)物示意圖間切換,原理圖包括組網(wǎng)結構、傳輸資源、監控主機等,而實(shí)物示意圖包括路由器、設備、采集器等,當然兩種圖的事件要一致,如雙擊某個(gè)設備圖形將顯示給設備的實(shí)時(shí)數據等,為了簡(jiǎn)化維護,將原理圖與實(shí)物示意圖封裝成ActiveX控件,由于每種圖需要加載許多圖形控件,消耗資源較大,不能同時(shí)加載,需要將其分解為兩個(gè)控件,在切換時(shí)首先卸載一個(gè)控件,然后加載另一個(gè)控件,所以要實(shí)現動(dòng)態(tài)加載ActiveX控件。

原理圖控件為--Theory.ocx ,對應工程為CTheory;

實(shí)物圖控件為---Fact.ocx ,對應工程為CFact;

注意:為了簡(jiǎn)化,在設計控件時(shí)不設置許可證關(guān)鍵字。

實(shí)物圖控件上的圖形對象可以被拖動(dòng),拖動(dòng)后的位置信息通過(guò)事件ChangePosition來(lái)通知擁有該控件的窗體,以便下次加載能顯示在最后位置,實(shí)物圖和原理圖控件都有雙擊事件完成的工作相同,其他事件此處忽略。

四、具體示例

1、準備工作

對控件Theory.ocx 、Fact.ocx 進(jìn)行注冊(利用Regsvr32.exe注冊);

建立窗體frmTest.frm ,在窗體上放置按鈕cmdLoadOcx—“原理圖”

2、聲明窗體級變量與加載函數LoadControl

Dim WithEvents oControl As VBControlExtender    
'地圖仿真控件對象
Dim mblnTheory As Boolean    '是否顯示原理圖

Private Function LoadControl(intType As Integer)

If   Not oControl Is Nothing Then
'首先判斷對象是否存在,若存在則卸載
Controls.Remove("MapView")
'卸載控件,此操作非常重要
End If
If intType = 0 Then
Set oControl = Controls.Add
("CTheory. Theory", "MapView")
Else
Set oControl = Controls.Add
("CFact.Fact", "MapView")
End If

oControl.Height = 3500
oControl.Width = 6500
oControl.Top = 100
oControl.Visible = True
End Function

Private Sub Form_Load()
mblnTheory = True
End Sub

3、為按鈕cmdLoadOcx編寫(xiě)代碼
Private Sub cmdLoadOCX_Click()
If mblnTheory Then
     Call LoadControl(0)
     mblnTheory = False
     cmdLoadOCX.Caption = "實(shí)物圖"
Else
     Call LoadControl(1)
     mblnTheory = True
     cmdLoadOCX.Caption = "原理圖"
End If
End Sub

4、為事件ChangePosition編寫(xiě)代碼
Private Sub oControl_ObjectEvent
(Info As EventInfo)
    Select Case Info.Name
    Case "ChangePosition"
       MsgBox CStr(Info.EventParamters.Item(
1).Value) + ":" + _   
   CStr(Info.EventParamters.Item(2).Value)
    Case "DbClick"
'雙擊處理代碼
    Case Else '
    End Select
End Sub


注意: EventInfo的參數EventParamters集合中是以1開(kāi)始的,一般來(lái)說(shuō),微軟新的集合一般是以1開(kāi)始的,而舊的是以0開(kāi)始的,如RdoErrors.Item(0)。
5、關(guān)閉窗口前卸載控件

Private Sub Form_Unload(Cancel As Integer)
Controls.Remove("MapView")
Set oControl = Nothing
End Sub

6、特別注意
通過(guò)Controls.Add方法添加的ActiveX控件一定不能在該工程中有該控件的任何引用,否則系統將出錯。

五、小結

通過(guò)使用動(dòng)態(tài)加載ActiveX控件使用龐大的應用程序變得很小,將不同的ActiveX控件進(jìn)行各種組合,使應用程序更加靈活多變,如您的應用系統要處理三十種門(mén)禁,而某個(gè)具體的用戶(hù)可能只有一種或兩種門(mén)禁,根本沒(méi)必要首先將所有門(mén)禁包含到應用中,可將各個(gè)門(mén)禁獨立封裝,只安裝注冊需要的組件,就象 Windows的自定義安裝一樣。微軟的未來(lái)技術(shù)基礎是分布式的組件技術(shù)(DCOM),將會(huì )把代碼的重用發(fā)揮得淋漓盡致。您不妨試一試動(dòng)態(tài)加載,也許會(huì )產(chǎn)生令您驚喜的效果!
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
詳細講述VB.NET開(kāi)發(fā)控件
VB程序的優(yōu)化
VB中PictureBox控件使用教程
這6道VB編程基礎知識題,讓你收獲滿(mǎn)滿(mǎn)
Treeview控件入門(mén)
如何用VB在窗體中實(shí)現閃爍文字
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久