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

Я разработал приложение ClickOnce с использованием элементов управления MS Chart.Это прекрасно работает для части графика.Но, поскольку Chart Control необходимо установить заранее (с правами администратора, а не с классическим развертыванием 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.Forms.DataVisualization, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей.Система не может найти указанный файл.Имя файла: 'System.Windows.Forms.DataVisualization, Версия = 3.5.0.0, Культура = нейтральный, PublicKeyToken = 31bf3856ad364e35' в SIPReportingControl.Main.expMain_SelectedGroupChanged (отправитель объекта, GroupEventArgs e) в Infragistics.Wang.UloeGentInventGventInventGentInventGentInventGventInventGroupEventBortОтправитель объекта, GroupEventArgs e)

Есть ли у вас какие-либо идеи для того, чтобы:

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

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

Редактировать Метод вызова (исключение генерируется, даже если я щелкаю в другой группе, отличной от 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 & vbCrLf & ex.StackTrace)
    End Try
End Sub

1 Ответ

1 голос
/ 14 октября 2011

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

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

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 & vbCrLf & 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

Это лучше?

...