DirectCastコマンドのオブジェクトタイプをプログラムで設定できますか?
-
19-08-2019 - |
質問
同僚による<!> quot; catch all <!> quot;の開発を支援しています。一部のアプリケーションのエラーハンドラーを入力します。彼がやりたいのは、エラーのあるオブジェクトと、そのオブジェクトのタイプ(TextBoxやComboBoxなど)を渡し、ハンドラー内でDirectCastメソッドを呼び出して、その中のText属性を適切にアドレス指定することです。一般的に、メソッドは次のようになります。
Protected Sub SpecialErrorHandler(ByVal TargetControl As Object, ByVal ControlType As String)
MessageBox.Show("Bad Juice: " & DirectCast(TargetControl, ControlType(ObjType)).Text)
End Sub
これまで、DirectCastメソッド内で型変換を行う(一般的な署名のオブジェクトを想定しているため)、または適切に設定されたTypeオブジェクトを渡すことも試みられません。
ここでのアイデア、またはこれはそれらの<!> quot;の1つです。キャスティングはそのようには機能しません。<!> quot;タイプシナリオ?
解決
DirectCast()
はコンパイル時に実際の型を必要とするため、呼び出しの結果がどのようになるかを知っています。ここで期待できる最善の方法は、期待するオブジェクトごとに共通の基本型にキャストすることです。この場合、Control
。
他のヒント
リフレクションを使用して、プロパティを抽出できます。また、オブジェクトが常にコントロールであることがわかっている場合は、コントロールにキャストしてからコントロールのTextプロパティを取得してみませんか?
Control errorObject = (Control)TargetControl;
MessageBox.Show("Error..."+errorObject.Test));
(C#コードについてはごめんなさい。VBには慣れていませんが、ほとんど同じです。)
この場合Control
のようなスーパークラスがなかった場合、探しているものはOption Strict Off
のTargetControl.Text
バージョンとほとんど同じであり、クラスはランタイム。