来自多个句柄的 Sender.Gettype



我有处理多个事件的代码。 仅供参考 - 我使用 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。 我尝试过寻找解决方案,但我尝试过的一切都失败了。

谢谢你的帮助。

强制转换不能动态完成,因为它的唯一目的是让编译器知道您希望对象属于某种类型。这是必需的,以便编译器知道在您尝试访问对象时包含哪些成员。

我应该提到,VB.NET 有一个称为后期绑定的功能,它允许您通过查找您尝试访问的成员在运行时是否存在来访问包装在Object中的类型的成员。但是,建议使用后期绑定,因为它很容易出错并破坏代码。

现在,关于你的问题:如果对象属于某种类型,或者如果它继承自该类型,则可以进行强制转换。由于我猜测您使用的是控件(您放置在表单上(,它们都应该从System.Windows.Forms.Control继承,因此您可以将它们转换为包含 base 属性Name的控件:

Select Case DirectCast(sender, Control).Name

最新更新