2009-11-04 67 views
1

我需要構建將被用來作爲一個插件對於一些外部VB6.0應用Vb6.0如何將一個函數/子過程作爲事件處理程序綁定到外部事件?

這OCX包含應該爲事件處理工作的一些外部事件的若干個子程序VB6.0 OCX (外部到ocx)。

問題是,使用此ocx的用戶只會調用一次我的ocx子程序中的一次。問題是,在這個一次初始化過程中,我如何將所有子處理函數/函數綁定到它們各自的外部事件,以便我們的過程在事件觸發時被調用?

我管理到外部應用程序本身內做到這一點,但不是當我移植這些代碼OCX,並用它作爲插件在外部VB程序

讓我們說這是在外部動原來的事件處理程序應用:

Private Sub someExternalControl1_someEvent(someParameter as boolean) 
     MsgBox ("The original event handler") 
    End Sub 

,並在VB應用程序,如果我這樣做:

dim withevents aaa as someExternalControl 
set aaa = someExternalControl1 

那麼這個自定義事件處理程序也將被稱爲每次與原沿事件觸發事件處理程序如上所述

Private Sub aaa_someEvent(someParameter as boolean) 
     MsgBox ("The custom event handler") 
    End Sub 

但我不能使相同,當我把這個在OCX。因爲我做不到:

Public WithEvents ocxMyPlugin As VBControlExtender 
... 

Set ocxMyPlugin = Controls.Add("myprogID.usercontrolname", "somename", Me) 
Set ocxMyPlugin.object.someExternalControl2 = someExternalControl ' this will raise error 
+0

你會得到什麼錯誤?是否someExternalControl2公開? someExternalControl是什麼類型。 – AnthonyWJones 2009-11-04 08:06:02

+0

someExternalControl2的類型實際上是一些外部控件,實際名稱是TesterControl。 – tensaix2j 2009-11-04 08:09:59

+0

然後您可能需要在您的項目中引用TesterControl。 – 2009-11-04 08:14:23

回答

0

我可能需要更多的細節來幫助。 什麼是ocxMyPlugin.object.someExternalControl2的類型 。如果目標應用程序未知,那麼您將在後期綁定時遇到問題。但是,您可以在第三個(或第四個項目)上創建包裝或界面,以解決您的問題。發佈您的設計以及您嘗試實現的目標非常重要。也許還有其他方法可以用來代替。

+0

ocxMyPlugin.object.someExternalControl2的類型是一些自定義控件。 基本上我試圖寫一個ocx,這將被嵌入到我無法控制的一些外部vb應用程序。 外部VB應用程序(我的客戶)的開發商一致認爲, 他的外部VB應用程序將調用4線加載我的OCX,並在他們的VB應用程序調用我的OCX的程序之一一次,但他們不會嵌入任何額外的代碼在他們的每個原始事件處理程序中。 問題是我需要做的事情,當他們的外部VB應用程序有一些VB事件解僱,我很感興趣的。 – tensaix2j 2009-11-04 08:24:50

1

雖然我從來沒有處理過這種情況,但我還記得有關在向表單動態添加控件時使用的VBControlExtender對象。

捅到我發現這個article。然後這個MSDN文檔VBControlExtender

特別是你想看看ObjectEvent。

瞭解沒有什麼好的方法來動態地將方法分配給.NET中的事件。 VB6通過使用WithEvents關鍵字標註變量來處理事件。

但是它是一個變量。所以,雖然你不能改變方法,你也可以改變對象的變量。

如果你有

Dim WithEvents X as SomeControl 
Dim Y as New SomeControl 
Dim Z as New SomeControl 

Private Sub X_MyEvent(ByVal MyParm as Variant) 

'Do Something like display the control name 

End if 

Public Sub TestY 
    Set X = Y 
End Sub 

Public Sub TestZ 
    Set X = Z 
End Sub 

如果激活後暴躁然後X_MyEvent將處理控制Y中的事件的事件,如果你主動後TestZ那麼X_MyEvent將處理控制Z中的事件的事件

使用VBControlExtender,您可以一般處理不同的控件。如果你實例化同一類型的多個控件,那麼你有相當多的工作要做。你不能在數組中使用withevent。在這種情況下,我會創建一個帶有事件的類來幫助我處理同一類型的多個控件。

相關問題