Sender.Gettype из нескольких дескрипторов - PullRequest
0 голосов
/ 17 мая 2018

У меня есть код, который обрабатывает несколько событий.К вашему сведению - я использую компоненты 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.Я пытался найти решение, но все, что я пробовал, терпит неудачу.

Спасибо за помощь.

1 Ответ

0 голосов
/ 17 мая 2018

Приведение не может быть выполнено динамически, потому что его единственная цель - сообщить компилятору, что вы ожидаете, что объект будет определенного типа.Это необходимо для того, чтобы компилятор знал, какие члены содержит объект, когда вы пытаетесь получить к нему доступ.

Следует отметить, что в VB.NET имеется функция под названием позднее связывание , которая позволяет вамполучить доступ к членам типа, заключенного в Object, просмотрев, существует ли член, к которому вы пытаетесь обратиться, существует во время выполнения.Однако использование позднего связывания не рекомендуется , поскольку очень легко допустить ошибки и взломать код.

Теперь, что касается вашей проблемы: приведение может бытьсделано, если объект имеет определенный тип, или если он наследуется от этого типа.Поскольку я предполагаю, что вы используете элементы управления (которые вы поместили в форму), все они должны наследоваться от System.Windows.Forms.Control, поэтому вы можете привести их к тому, что содержит базовое свойство Name:

Select Case DirectCast(sender, Control).Name
...