2017-01-30 7 views
2

ctrlAddChangeDelete1はおそらくからフレンドクラスctrlAddChangeDeleteを呼び出している私はVBに新たなんだと私は現在、私がネットに書いていないと私は、このエラーに苦しんだVB6のアプリを移行しています、この変数にアクセスする方法は?

If TypeOf Application.OpenForms.Item(i) Is frmAddChangeDelete Then 
      'UPGRADE_ISSUE: Control ctrlAddChangeDelete1 could not be resolved because it was within the generic namespace Form. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="084D22AD-ECB1-400F-B4C7-418ECEC5E36E"' 

      If **Application.OpenForms.Item(i).ctrlAddChangeDelete1.ParentFormNumber = intFormNumber** Then 

       If Application.OpenForms.Item(i).Text = "Add Proofed Expense Items" Then 
        boolAddProofed = True 
        Exit For 

"'ctrlAddChangeDelete1' is not a member of 'System.Windows.Forms.Form'."

すべてのヘルプは高く評価されていることを言って、なぜ別のVBファイルなので、私はわからないんだけど、ありがとう!

答えて

2

Application.OpenFormsは強く型付けされていないコレクションです。
ここで要素を参照すると、ジェネリックフォームが返されます。一般的な形式で
あなたはfrmAddChangeDeleteという名前のフォーム派生クラスを持っており、このクラスがctrlAddChangeDelete1という名前のコントロールを持っているなら、あなたはOpenFormsに格納されている基準をキャストする必要が

ctrlAddChangeDelete1という名前のコントロールがありませんそのコントロールを参照しようとする前に、特定のフォームクラスにコレクションを追加します。

さらに、外部コードからそのコントロールにアクセスするには、ModifiersプロパティをデフォルトのInternalではなくPublicに設定する必要があります。そうしないと、クラスの外部のコードからコントロールにアクセスすることができなくなります。正しくあなたは上記のコードはIEnumerable.OfType拡張子を使用しており、これはImports System.Linqを必要

Dim delForm = Application.OpenForms. 
         OfType(Of frmAddChangeDelete) 
         FirstOrDefault() 
If delForm Is Nothing Then 
    ' No form of type frmAddChangeDelete is present in the collection 
    ' write here your message and exit ? 
Else 
    ' Now you can use delForm without searching again in the collection 
    ...... 

を書くことができ、あなたのフォームを取得するために

。あなたは正しいクラス

' Still you need a for loop up ^^^^ before these lines 
Dim delForm = TryCast(Application.OpenForms(i), frmAddChangeDelete) 
if delForm Is Nothing then 
    .... 
else 
    .... 
+0

への参照を取得するためにあなたが常にTryCast演算子を使用することができ、その後、これを使用したくない場合は
が、私は今、多くの方のエラーをundestand、ありがとうございました! 明らかにOfTypeがOpenForms内に存在しないため、名前空間/参照に何か問題があります。 – Sam

+0

[IEnumerable.OfType](https://msdn.microsoft.com/en-us/library) /bb360913(v=vs.110).aspx)拡張にはSystem.Linq名前空間が必要です(既に参照があるはずですが、Imporst System.Linqが必要です) – Steve

関連する問題