2010-12-14 74 views
0

我正在編寫一個.NET DLL來遍歷VB6 Form中的所有控件通過byref。如何在VB.NET中找到TypeOf VB6控件

到目前爲止,似乎工作VB.NET代碼:

Public Sub AddFormRefLegacy(ByRef strAppName As String, ByRef objForm As Object) 

     'update the forms caption 
     objForm.Caption = FindValue(strAppName, objForm.Name, "", "0", objForm.Caption) 

     'iterate through all the controls on the form   
     For Each ctl As Object In objForm.Controls 
      if TypeOf ctl is Label then 
      'this doesn't pick up any labels 
      end if 
     Next 
    End Sub 

從這個VB6代碼調用:

Dim libDD As New Lib.clsDataDictionary 
libDD.AddFormRefLegacy "nnne", Me 

但typeof運算符不起作用。有沒有另一種方法來找到控制的類型?

+0

你在比較蘋果和橘子。 VB.NET Label類是一個.NET類,VB6 Label控件是一個ActiveX控件。唯一可能的方法是Marshal.GetIUnknownForObject + Marshal.QueryInterface,但這些控件的IID不能在我知道的任何地方獲得。 – 2010-12-14 15:43:30

回答

1

難道你是在比較兩個不同的「標籤」類型的對象。

您沒有在IF TYPEOF行中限定LABEL類型,因此您可以將VB6標籤與.net標籤進行比較,它們不會相同。

你可以使用TYPENAME,但這可能不是你所需要的。我會確保你真的比較你認爲你正在比較的類型。

+0

感謝您在正確的方向 - 我欣賞我比較兩種不同的東西,但我想找到找到VB6類型的一些方法。 TypeName效果很好,我可以編寫一個select語句來處理不同類型的數據。我的函數只處理VB6表單,而我有另一個處理.NET的表單,所以混合類型不是問題 - 感謝您的幫助。 – Matt 2010-12-14 17:35:57

0

您是否嘗試過使用TypeName函數?它是否會返回對TypeName(ctl)有用的任何內容?

+0

是類型名稱返回「標籤」「框架」「命令按鈕」等,所以這適用於我。 – Matt 2010-12-14 17:38:06