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 对象都不起作用。

这里有任何想法,或者这是那些“铸造不起作用”中的一个。类型场景?

4

3 回答 3

2

DirectCast()在编译时需要一个真实的类型,所以它知道调用的结果是什么样的。您在这里所能期望的最好的结果是为您期望的每个对象转换为一个通用的基本类型。在这种情况下,您很幸运,因为您有一个相当有用的基本类型: Control.

于 2009-01-16T21:30:50.207 回答
1

您可以使用反射来提取属性。此外,如果您知道对象始终是 Control,为什么不将其转换为 Control,然后获取控件的 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 回答