0

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

感谢您的帮助。

4

1 回答 1

1

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

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

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

Select Case DirectCast(sender, Control).Name
于 2018-05-17T17:13:43.567 回答