コーディングの慣行を整理しようとしていますが、解決できない問題に遭遇しました。
オプション strict をオンにすると、どのようにフォームのインスタンスを見つけて、そのインスタンスで public サブルーチンを実行するのでしょうか?
たとえば、在庫パッケージでは、パーツをチェックアウトするためのショートカットがあり、チェックアウト フォームが開いているかどうかを確認し、Checkout.AddID(ID as Integer) を実行します。例えば:
For Each Form In Application.OpenForms
If Form.Name = "FRMCheckout" Then
Form.AddIDToList(PartID)
End If
Next
これは、オプション strict off で問題なく動作します。ただし、オンにして、次のように変更します。
For Each Form As Windows.Forms.Form In Application.OpenForms
' If Form.Name = "FRMCheckout" Then EDIT: Dropped this in leu of this:
If TypeOf (Form) Is FRMCheckout Then
Form.AddIDToList(Ctype(PartID, Integer))
End If
Next
(明らかに) .AddIDToList が Forms.form のメンバーではないというエラーをスローします。
に変更するFor Each Form as ProgramNamespace.FRMCheckout
と、for ループが通常のフォームにヒットするたびに、'Cannot cast type form to FRMcheckout' がスローされます。
オプションstrictをオフにせずにこれを達成する方法は何でしょうか?