我有处理多个事件的代码。仅供参考-我使用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我在select case行遇到错误。我想不出如何动态地获取类型,以便能够直接转换到它。在本例中,类型将为DevExpress.XtraEditors.GridLookUpEdit和DevExpress.XtraEditors.LookUpEdit。我试着寻找解决方案,但我尝试的一切都失败了。
谢谢你的帮助。
发布于 2018-05-18 01:13:44
强制转换不能动态完成,因为它的唯一目的是让编译器知道您希望对象是某种类型。这是必要的,这样当您尝试访问对象时,编译器才能知道该对象包含哪些成员。
值得一提的是,VB.NET有一个称为后期绑定的特性,它允许您通过查看要访问的成员在运行时是否存在来访问包装在Object中的类型的成员。但是,使用后期绑定时,不推荐使用,因为它很容易出错并破坏您的代码。
现在,对于您的问题:如果一个对象是某种类型,或者如果它继承自该类型,则可以进行强制转换。由于我猜测您使用的是控件(放在窗体上),它们都应该从System.Windows.Forms.Control继承,因此您可以将它们强制转换为包含基属性Name的控件
Select Case DirectCast(sender, Control).Namehttps://stackoverflow.com/questions/50396336
复制相似问题