Как узнать, установлены ли элементы управления MS Chart на клиентской рабочей станции?

#vb.net #exception-handling #clickonce #mschart

#vb.net #обработка исключений #clickonce #mschart

Вопрос:

Я разработал приложение ClickOnce с использованием элементов управления MS Chart. Это отлично работает для построения графиков. Но, поскольку элемент управления диаграммой должен быть установлен заранее (с правами администратора, а не при классическом развертывании ClickOnce), мне нужно определить, доступен ли компонент на компьютере.

Итак, я попытался создать новую диаграмму и обработать возможное исключение, но, похоже, его невозможно перехватить (слишком низкоуровневое исключение?) :

 Try
  Dim oChart as New Chart
Catch
  ' Some user-friendly message to ask the user to contact the helpdesk
End Try
  

Этот код никогда не выполняется: я получаю необработанное исключение, как только я ввожу событие, в котором находится этот код.

Подробности о вызове JIT-отладки вместо этого диалогового окна см. В конце этого сообщения.

******* Текст исключения ***** System.IO.FileNotFoundException: не удалось загрузить файл или сборку ‘System.Windows.Формы.Визуализация данных, версия = 3.5.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35’ или одна из его зависимостей. Система не может найти указанный файл. Имя файла: ‘System.Windows.Формы.Визуализация данных, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken= 31bf3856ad364e35’ в SIPReportingControl.Main.expMain_SelectedGroupChanged(отправитель объекта, GroupEventArgs e) в Infragistics.Win.UltraWinExplorerBar.SelectedGroupChangedEventHandler.Вызов (отправитель объекта, GroupEventArgs e)

У вас есть какие-нибудь идеи, чтобы:

  • иметь возможность развертывать элементы управления MS Chart с помощью ClickOnce (я не думаю, что это возможно).
  • определите, установлены ли элементы управления диаграммой или нет.
  • поймайте это странное исключение.

Заранее спасибо.

Отредактируйте вызывающий метод (исключение генерируется, даже если я нажимаю в другой группе, чем Reporting):

 Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged
    Try
        If blnDoEvent Then
            CleanControls()
            Select Case e.Group.Key
                Case "Search"
                    DisplayGrid(True)
                Case "AddEdit"
                    DisplayAddEdit(Nothing)
                Case "Reporting"
                    Dim oChart As New Chart
            End Select
        End If
    Catch ex As Exception
        MsgBox(ex.Message amp; vbCrLf amp; ex.StackTrace)
    End Try
End Sub
  

Ответ №1:

Я видел интересный ответ об исключении, которое было сгенерировано в сгенерированном коде MSIL для вызова функции, к сожалению, оно было удалено, и я не могу добавить к нему комментарий.

Я понял, что ваш код не несет ответственности за запуск события. Я бы предложил поместить весь оператор целиком в подраздел и назвать его заключенным в try catch таким образом :

 Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged 
    Try 
        RedirectTo(e.Group.Key)
    Catch ex As Exception 
        MsgBox(ex.Message amp; vbCrLf amp; ex.StackTrace) 
    End Try 
End Sub 

Sub RedirectTo(Screen as string)
    If blnDoEvent Then 
        CleanControls() 
        Select Case Screen 
            Case "Search" 
                 DisplayGrid(True) 
            Case "AddEdit" 
                 DisplayAddEdit(Nothing) 
            Case "Reporting" 
                 Dim oChart As New Chart 
        End Select 
    End If
End Sub
  

Это лучше?