我正在帮助一位同事为他的应用程序开发一个“catch all”类型的错误处理程序。他想要做的是传递具有错误的对象,以及该对象的类型,如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对象都不起作用。
这里有任何想法,或者这就是“铸造不会那样工作”。类型场景?
答案 0 :(得分:2)
DirectCast()
在编译时需要一个真实的类型,因此它知道调用的结果是什么样的。您可以期待的最好的方法是为您期望的每个对象强制转换为公共基类型。在这种情况下,你很幸运,因为你有一个相当有用的基类型:Control
。
答案 1 :(得分:1)
您可以使用反射来提取属性。另外,如果您知道对象始终是Control,为什么不将其强制转换为Control,然后获取控件的Text属性?
Control errorObject = (Control)TargetControl;
MessageBox.Show("Error..."+errorObject.Test));
(抱歉C#代码,不熟悉VB,但应该差不多。)
答案 2 :(得分:0)
请注意,如果没有超类,例如Control
,那么您所寻找的内容几乎与Option Strict Off
版TargetControl.Text
版相同直到运行时才确定该类。