0

私は、同僚がアプリケーションのいくつかのコントロール用の「キャッチオール」タイプのエラーハンドラーを開発するのを手伝っています。彼がやりたいことは、エラーのあるオブジェクトとそのオブジェクトの型 (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 オブジェクトを渡そうとしても機能しません。

ここにアイデアはありますか、それとも「キャスティングがうまくいかない」の 1 つですか。タイプシナリオ?

4

3 に答える 3

2

DirectCast()コンパイル時に実際の型が必要なので、呼び出しの結果がどのように見えるかがわかります。ここで期待できる最善の方法は、期待する各オブジェクトの共通の基本型にキャストすることです。この場合、かなり便利な基本型: があるという点で幸運です Control

于 2009-01-16T21:30:50.207 に答える
1

リフレクションを使用してプロパティを抽出できます。また、オブジェクトが常にコントロールであることがわかっている場合は、それをコントロールにキャストしてから、コントロールのTextプロパティを取得してみませんか?

Control errorObject = (Control)TargetControl;
MessageBox.Show("Error..."+errorObject.Test));

(C#コードについては申し訳ありませんが、VBにはあまり詳しくありませんが、ほぼ同じである必要があります。)

于 2009-01-16T21:40:25.507 に答える
0

この場合のように、スーパー クラスが存在しない場合、クラスが実行時まで決定されないという点で、Control探しているものは のOption Strict Offバージョンとほぼ同じであることに注意してください。TargetControl.Text

于 2013-02-22T16:14:40.663 に答える