簡體   English   中英

VB.NET問題與“控制數組”

[英]VB.NET Problem with “Control Arrays”

我有一個VB.NET應用程序,並使用了一些第三方(封閉源)ActiveX控件。 其中一個控件代表一個“攝像機”(通過多個接口連接),我嘗試編寫一個示例,說明如何在一個應用程序中使用多個攝像機。 為此,我將多個“相機”對象動態分配為一個數組,該數組按預期方式工作,如下所示:

Const NUM_CAMERAS = 2
Private MyCameras(NUM_CAMERAS ) As xxx.MCamera

但是需要為相機對象分配WithEvents因為它們會在拍攝新圖像時引發事件。 我發現WithEvents變量無法鍵入為數組,這是一個非常普遍的問題,因此我也找到了一些解決方法: http : //www.dreamincode.net/code/snippet885.htm http://www.xtremevbtalk.com/存檔/ index.php的/叔223970.html

這已經很有幫助,我將其采納為我的概念。 因此,我有一個MyCameras數組和一個MyCamera所有“沒有事件”,首先分配一個新的MyCamera對象,添加一個事件處理程序,然后將其放入數組中。 不幸的是我打電話時遇到錯誤

AddHandler Camera.ProcessModifiedImage, AddressOf MyHook

通常,“ MyHook”被聲明為

Private Sub MyHook (ByVal sender As Object, ByVal ModifiedBuffer As xxx.ProcessModifiedImageEvent) Handles Camera.ProcessModifiedImage

就像在“按鈕示例”中一樣,我只是刪除了“ Handles Camera.ProcessModifiedImage”,但是我收到一個錯誤,即“ MyHook”的簽名與委托的簽名不同

Delegate Sub ICameraEvents_ProcessModifiedImageEventHandler(ImageIndex as Integer)

有誰知道如何解決這個問題以及要進行哪些更改? 如有必要,我明天可以發布更多代碼和詳細信息。

“ MyHook”事件處理程序需要與委托具有相同的簽名(即,以相同的順序接受相同的參數類型)。 由於所需的委托接受一個稱為ImageIndex的整數參數,因此可以將MyHook事件處理程序聲明為:


Private Sub MyHook(ImageIndex as Integer)

End Sub

跟隨Waves帖子的評論,您可以使用lambda表達式優雅地處理丟失的“ sender”參數:

  Public Sub New()
    InitializeComponent()
    For camera As Integer = 1 To 4
      Dim cam As Camera = DirectCast(Me.Controls("Camera" + camera.ToString), Camera)
      AddHandler cam.ProcessModifiedImage, Function(index As Integer) ProcessImage(cam, index)
    Next
  End Sub

  Private Function ProcessImage(ByVal cam As Camera, ByVal ImageIndex As Integer) As Integer
    ' Your code here
    '...
    Return 0
  End Function

錯誤告訴您您需要什么-事件處理程序的簽名必須與他們指定的委托匹配(帶有一個ImageIndex參數的子例程)

所以你要

Private Sub MyHook(ImageIndex as Integer)

您可能已經看到所有事件處理程序都采用myhook格式(發送方為對象,e為XXEventArgs)

這是Microsoft用於其.NET事件的約定,但不是必需的。 您的第三方工具顯然不遵循該約定。 當消息告訴您委托人簽名必須是什么樣時,只需遵循該消息即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM