我有处理多个事件的代码。仅供参考 - 我使用Devexpress组件。我有两个项目,一个Lookupedit和一个GridLookupEdit,由相同的代码处理。我正在尝试做以下事情:
Dim type = sender.GetType()
Select Case DirectCast(sender, Type).Name
Case "mgrLUE"
log("View metrics for manager: " & mgrLUE.Properties.GetDisplayText(mgrLUE.EditValue), Me.Name)
Case "sectLUE"
log("View metrics for section: " & sectGLUE.Properties.GetDisplayText(sectGLUE.EditValue), Me.Name)
End Select
我在选择案例行遇到错误。我无法弄清楚如何动态获取类型,以便能够直接转换为它。在这种情况下,类型将是DevExpress.XtraEditors.GridLookUpEdit和DevExpress.XtraEditors.LookUpEdit。我试过寻找解决方案,但我尝试的一切都失败了。
感谢您的帮助。
答案 0 :(得分:1)
无法动态执行转换,因为它的唯一目的是让编译器知道您希望某个对象属于某种类型。这是必要的,以便编译器在您尝试访问它时知道对象包含的成员。
我应该提到VB.NET有一个名为后期绑定的功能,它允许您通过查找成员是否访问包含在Object
中的类型的成员尝试访问在运行时存在。但是,使用后期绑定, 不推荐 ,因为它很容易出错并破坏您的代码。
现在,至于你的问题:如果一个对象属于某种类型,或者它继承自该类型,则可以进行强制转换。由于我猜你正在使用的是控件(你已经放在表单上),所以它们都应该继承自System.Windows.Forms.Control
,因此你可以将它们转换为包含基本属性Name
的控件。 :
Select Case DirectCast(sender, Control).Name