DirectCastコマンドのオブジェクトタイプをプログラムで設定できますか?

StackOverflow https://stackoverflow.com/questions/452060

  •  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 OffTargetControl.Textバージョンとほとんど同じであり、クラスはランタイム。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top