Подмена диалогов Открыть и Сохранить на Vb-2008

отредактировано 09:34 Раздел: FastReport .NET
Здравствуйте!

Почему-то EnvironmentSettings не реагирует на события в VB-2008.
Мне надо подменить события Открыть и Сохранить.
Это можно сделать?

Спасибо.

Комментарии

  • отредактировано 09:34
    Здравствуйте,

    К сожалению, по каким-то причинам события EnvironmentSettings в VB не работают. Используйте их полные аналоги, доступные в классе Config.DesignerSettings.
  • отредактировано 09:34
    AlexTZ написал: »
    Здравствуйте,

    К сожалению, по каким-то причинам события EnvironmentSettings в VB не работают. Используйте их полные аналоги, доступные в классе Config.DesignerSettings.
    Прошу прощения за нахальство. А можно пример?

    Спасибо!
  • отредактировано 09:34
    Пример есть на C# в папке Demos\C#\CustomOpenSaveDialogs. Вот примерный аналог кода Form1.cs на VB (конвертировано с помощью Reflector):
    Public Class Form1
      Inherits Form
      ' Methods
      Public Sub New()
        Me.InitializeComponent
      End Sub
    
      Private Sub btnDesign_Click(ByVal sender As Object, ByVal e As EventArgs)
        Me.DesignReport
      End Sub
    
      Private Sub DesignerSettings_CustomOpenDialog(ByVal sender As Object, ByVal e As OpenSaveDialogEventArgs)
        Using form As OpenDialogForm = New OpenDialogForm
          form.ReportsTable = Me.ReportsTable
          e.Cancel = (form.ShowDialog <> DialogResult.OK)
          e.FileName = form.ReportName
        End Using
      End Sub
    
      Private Sub DesignerSettings_CustomOpenReport(ByVal sender As Object, ByVal e As OpenSaveReportEventArgs)
        Me.OpenReport(e.Report, e.FileName)
      End Sub
    
      Private Sub DesignerSettings_CustomSaveDialog(ByVal sender As Object, ByVal e As OpenSaveDialogEventArgs)
        Using form As SaveDialogForm = New SaveDialogForm
          e.Cancel = (form.ShowDialog <> DialogResult.OK)
          e.FileName = form.ReportName
          e.Data = 1
        End Using
      End Sub
    
      Private Sub DesignerSettings_CustomSaveReport(ByVal sender As Object, ByVal e As OpenSaveReportEventArgs)
        Me.SaveReport(e.Report, e.FileName)
      End Sub
    
      Private Sub DesignReport()
        Using report As Report = New Report
          AddHandler report.LoadBaseReport, New CustomLoadEventHandler(AddressOf Me.report_LoadBaseReport)
          Me.OpenReport(report, "1")
          report.FileName = "1"
          report.Design
        End Using
      End Sub
    
      Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        If (disposing AndAlso (Not Me.components Is Nothing)) Then
          Me.components.Dispose
        End If
        MyBase.Dispose(disposing)
      End Sub
    
      Private Sub FinalizeDatabase()
        Me.FReportsDs.WriteXml((Config.ApplicationFolder & "..\..\database.xml"), XmlWriteMode.WriteSchema)
      End Sub
    
      Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs)
        Me.FinalizeDatabase
      End Sub
    
      Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
        Me.InitializeDatabase
        Me.WireupDesignerEvents
      End Sub
    
      Private Sub InitializeComponent()
        Me.btnDesign = New Button
        MyBase.SuspendLayout
        Me.btnDesign.Location = New Point(&H4C, &HD4)
        Me.btnDesign.Name = "btnDesign"
        Me.btnDesign.Size = New Size(&H90, &H17)
        Me.btnDesign.TabIndex = 0
        Me.btnDesign.Text = "Run the Designer"
        Me.btnDesign.UseVisualStyleBackColor = True
        AddHandler Me.btnDesign.Click, New EventHandler(AddressOf Me.btnDesign_Click)
        MyBase.AutoScaleDimensions = New SizeF(96!, 96!)
        MyBase.AutoScaleMode = AutoScaleMode.Dpi
        MyBase.ClientSize = New Size(&H124, &H10A)
        MyBase.Controls.Add(Me.btnDesign)
        Me.Font = New Font("Tahoma", 8.25!, FontStyle.Regular, GraphicsUnit.Point, &HCC)
        MyBase.Name = "Form1"
        Me.Text = "Custom Open/Save dialogs"
        AddHandler MyBase.Load, New EventHandler(AddressOf Me.Form1_Load)
        AddHandler MyBase.FormClosed, New FormClosedEventHandler(AddressOf Me.Form1_FormClosed)
        MyBase.ResumeLayout(False)
      End Sub
    
      Private Sub InitializeDatabase()
        Me.FReportsDs = New DataSet
        Me.FReportsDs.ReadXml((Config.ApplicationFolder & "..\..\database.xml"))
      End Sub
    
      Private Sub OpenReport(ByVal report As Report, ByVal reportName As String)
        Dim row As DataRow
        For Each row In Me.ReportsTable.Rows
          If (CStr(row.Item("ReportName")) = reportName) Then
            Dim reportBytes As Byte() = DirectCast(row.Item("ReportStream"), Byte())
            Using stream As MemoryStream = New MemoryStream(reportBytes)
              report.Load(stream)
            End Using
            Exit For
          End If
        Next
      End Sub
    
      Private Sub report_LoadBaseReport(ByVal sender As Object, ByVal e As CustomLoadEventArgs)
        Me.OpenReport(e.Report, e.FileName)
      End Sub
    
      Private Sub SaveReport(ByVal report As Report, ByVal reportName As String)
        Dim reportRow As DataRow = Nothing
        Dim row As DataRow
        For Each row In Me.ReportsTable.Rows
          If (CStr(row.Item("ReportName")) = reportName) Then
            reportRow = row
            Exit For
          End If
        Next
        If (reportRow Is Nothing) Then
          reportRow = Me.ReportsTable.NewRow
          Me.ReportsTable.Rows.Add(reportRow)
        End If
        Using stream As MemoryStream = New MemoryStream
          report.Save(stream)
          reportRow.Item("ReportName") = reportName
          reportRow.Item("ReportStream") = stream.ToArray
        End Using
      End Sub
    
      Private Sub WireupDesignerEvents()
        AddHandler Config.DesignerSettings.CustomOpenDialog, New OpenSaveDialogEventHandler(AddressOf Me.DesignerSettings_CustomOpenDialog)
        AddHandler Config.DesignerSettings.CustomOpenReport, New OpenSaveReportEventHandler(AddressOf Me.DesignerSettings_CustomOpenReport)
        AddHandler Config.DesignerSettings.CustomSaveDialog, New OpenSaveDialogEventHandler(AddressOf Me.DesignerSettings_CustomSaveDialog)
        AddHandler Config.DesignerSettings.CustomSaveReport, New OpenSaveReportEventHandler(AddressOf Me.DesignerSettings_CustomSaveReport)
      End Sub
    
    
      ' Properties
      Private ReadOnly Property ReportsTable As DataTable
        Get
          Return Me.FReportsDs.Tables.Item(0)
        End Get
      End Property
    
    
      ' Fields
      Private btnDesign As Button
      Private components As IContainer = Nothing
      Private FReportsDs As DataSet
    End Class
    
  • отредактировано 09:34
    AlexTZ написал: »
    Пример есть на C# в папке Demos\C#\CustomOpenSaveDialogs. Вот примерный аналог кода Form1.cs на VB (конвертировано с помощью Reflector):

    Здравствуйте!
    Пример на C# несколько нерабочий, т.к. отсутствует файл database.xml. А вот конвертированый пример здорово помог.
    Большое спасибо!!!
    На всякий случай выкладываю то, что у меня получилось. Может пригодится кому.
    Imports System.Windows.Forms
    Imports FastReport.Utils
    Imports FastReport.Design
    Imports System.IO
    Imports FastReport
    
    'Подмена стандартных диалогов Открыть и Сохранить отчет
    'На форме создать кнопку с именем "btndesign"
    'В обозревателе обьектов добавить ссылку на библиотеку FastReport.dll
    '=====================================================================
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
            Me.WireupDesignerEvents()
        End Sub
    
        Private Sub WireupDesignerEvents()
            AddHandler Config.DesignerSettings.CustomOpenDialog, New  _
                    OpenSaveDialogEventHandler(AddressOf Me.DesignerSettings_CustomOpenDialog)
            AddHandler Config.DesignerSettings.CustomOpenReport, New  _
                    OpenSaveReportEventHandler(AddressOf Me.DesignerSettings_CustomOpenReport)
            AddHandler Config.DesignerSettings.CustomSaveDialog, New  _
                    OpenSaveDialogEventHandler(AddressOf Me.DesignerSettings_CustomSaveDialog)
            AddHandler Config.DesignerSettings.CustomSaveReport, New  _
                    OpenSaveReportEventHandler(AddressOf Me.DesignerSettings_CustomSaveReport)
        End Sub
    
        Private Sub btndesign_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndesign.Click
            DesignReport()   'Вызов дизайнера по нажатию кнопки   
        End Sub
    
        Private Sub DesignReport()   'Открыть дизайнер
            Dim report As Report = New Report
            report.Design()
        End Sub
    
        'Открытие диалога выбора шаблона отчета
        Private Sub DesignerSettings_CustomOpenDialog(ByVal sender As Object, ByVal e _
                                                      As OpenSaveDialogEventArgs)
    
            Using dialog As OpenFileDialog = New OpenFileDialog()
                dialog.InitialDirectory = Application.StartupPath    'Выбор стартовой директории
                dialog.Filter = "Шаблоны отчетов (*.frx)|*.frx"
                e.Cancel = dialog.ShowDialog() <> DialogResult.OK
                e.FileName = dialog.FileName
            End Using
        End Sub
    
        'Открытие выбранного отчета в дизайнере
        Private Sub DesignerSettings_CustomOpenReport(ByVal sender As Object, ByVal e _
                                                      As OpenSaveReportEventArgs)
            e.Report.Load(e.FileName)
        End Sub
    
        'Открытие диалога записи шаблона
        Private Sub DesignerSettings_CustomSaveDialog(ByVal sender As Object, ByVal e _
                                                      As OpenSaveDialogEventArgs)
            Using Dialog As SaveFileDialog = New SaveFileDialog
                Dialog.InitialDirectory = Application.StartupPath   'Выбор стартовой директории
                Dialog.Filter = "Файл шаблона (*.frx)|*.frx"
                Dialog.FileName = e.FileName
                e.Cancel = (Dialog.ShowDialog <> DialogResult.OK)
                e.FileName = Dialog.FileName
            End Using
        End Sub
    
        'Запись шаблона отчета
        Private Sub DesignerSettings_CustomSaveReport(ByVal sender As Object, ByVal e _
                                                      As OpenSaveReportEventArgs)
            e.Report.Save(e.FileName)
        End Sub
    
    End Class
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.