Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 是否可以通过编程方式设置DirectCast命令的对象类型?_Vb.net_Casting_Directcast - Fatal编程技术网

Vb.net 是否可以通过编程方式设置DirectCast命令的对象类型?

Vb.net 是否可以通过编程方式设置DirectCast命令的对象类型?,vb.net,casting,directcast,Vb.net,Casting,Directcast,我正在帮助一位同事为他的应用程序中的一些控件开发一个“全面”类型的错误处理程序。他要做的是传递有错误的对象以及该对象的类型,如TextBox或ComboBox,然后在其处理程序中调用DirectCast方法,以正确处理其中的Text属性。通常,该方法如下所示: Protected Sub SpecialErrorHandler(ByVal TargetControl As Object, ByVal ControlType As String) MessageBox.Show("Bad

我正在帮助一位同事为他的应用程序中的一些控件开发一个“全面”类型的错误处理程序。他要做的是传递有错误的对象以及该对象的类型,如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方法内进行类型转换(因为它期望在常规签名中有一个对象)或甚至正确地传递类型对象集的尝试都不起作用


这里有什么想法吗,或者这是一个“强制转换不能那样工作。”类型场景?

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

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

您可以使用反射来提取属性。此外,如果知道对象始终是控件,为什么不将其强制转换为控件,然后获取控件的文本属性

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

(很抱歉,C代码不太熟悉VB,但应该基本相同。)

您可以使用反射来提取属性。此外,如果知道对象始终是控件,为什么不将其强制转换为控件,然后获取控件的文本属性

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

(很抱歉C代码,对VB不太熟悉,但应该差不多一样。)

注意,如果没有超类,比如本例中的
Control
,您要查找的内容几乎与
TargetControl.Text的
选项Strict Off
版本相同,因为类直到运行时才确定。

请注意,如果没有超级类,如本例中的
Control
,您要查找的内容与
TargetControl.Text的
选项Strict Off
版本几乎相同,因为类直到运行时才确定。

我有一个预感,但想先与大师取得联系。谢谢我有预感,但我想先和大师们谈谈。谢谢不用担心C代码。我正在向他透露这件事的可能性。如果他不需要比文本字段更复杂的东西,他应该已经准备好了。谢谢不用担心C代码。我正在向他透露这件事的可能性。如果他不需要比文本字段更复杂的东西,他应该已经准备好了。谢谢