Как изменить существующий класс VB.NET для передачи дополнительной переменной - PullRequest
0 голосов
/ 25 октября 2018

Мой навык ООП не очень силен, мне трудно понять, как изменить существующий класс для передачи дополнительных переменных.

Немного фона.

Я пытался напечатать отчет RDLC с использованием VB.net.Я нашел рабочий класс C # и изменил его на VB.Net.в настоящее время работает нормально.У класса есть метод для назначения высоты страницы, ширины и значения поля.Я жестко запрограммировал его, чтобы удовлетворить мою текущую потребность.но я не хочу жестко его кодировать, я хочу передать значение высоты, ширины и поля в класс.

Оригинальный класс

Нажмите, чтобы увидеть

Моя модификация, жестко запрограммированная в класс

Return String.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat>
                                                            <StartPage>0</StartPage>
                                                            <EndPage>0</EndPage>
                                                            <MarginTop>{0}</MarginTop>
                                                            <MarginLeft>{1}</MarginLeft>
                                                            <MarginRight>{2}</MarginRight>
                                                            <MarginBottom>{3}</MarginBottom>
                                                            <PageHeight>{4}</PageHeight>
                                                            <PageWidth>{5}</PageWidth>
                                                            </DeviceInfo>", ToInches(10),
                                                            ToInches(5), ToInches(5),
                                                            ToInches(10), ToInches(600),
                                                            ToInches(900))

Как я постоянно звоню с события нажатия кнопки

Dim autoprintme As AutoPrintCls = New AutoPrintCls(ReportViewer1.LocalReport)
autoprintme.Print()

Как я хочу его назвать

Dim hight As Double = 585 
Dim width As Double = 827 
Dim autoprintme As AutoPrintCls = New AutoPrintCls(ReportViewer1.LocalReport, hight, width)
autoprintme.Print()

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы хотите передать дополнительные переменные этому классу без нарушения того, что уже существует?Нет проблем, мой друг: мы создадим новую перегрузку, которая вызовет оригинальную, но с изюминкой!

Вот оригинальный Sub (), как я его прочитал:

    Public Sub New(ByVal report As Report)
        Dim reportPageSettings As ReportPageSettings = report.GetDefaultPageSettings()
        m_pageSettings = New PageSettings()
        m_pageSettings.PaperSize = reportPageSettings.PaperSize
        m_pageSettings.Margins = reportPageSettings.Margins
    End Sub

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

    Public Sub New(ByVal report As Report, ByVal height as Double, ByVal width as Double)
        Initialize(report)
        Me.height = height
        Me.width = width
    End Sub

    Private Sub Initialize(ByVal report as Report)
        Dim reportPageSettings As ReportPageSettings = report.GetDefaultPageSettings()
        m_pageSettings = New PageSettings()
        m_pageSettings.PaperSize = reportPageSettings.PaperSize
        m_pageSettings.Margins = reportPageSettings.Margins
        RenderAllLocalReportPages(localReport)
    End Sub

Теперь яизвините, потому что уже поздно, и я действительно предполагаю кое-что здесь: я предполагаю, что каким бы ни был этот класс, у него есть свойство width и свойство height.Если это не так, вам придется придумать способ просто изменить их так, чтобы это имело смысл.

Кажется, у вас есть некоторый опыт программирования, поэтому я уверен, что вы получите то, что язначит, а также удачи!(и если у вас все еще есть проблемы, не стесняйтесь спрашивать о них)

0 голосов
/ 25 октября 2018

Вы хотите передать высоту и ширину в качестве параметров вашему методу CreateEMFDeviceInfo.Он должен использовать эти параметры в строке.Итак ..

 Private Sub RenderAllLocalReportPages(ByVal localReport As LocalReport)
        Try
            Dim deviceInfo As String = CreateEMFDeviceInfo()
            Dim warnings As Warning()
            localReport.Render("IMAGE", deviceInfo, AddressOf LocalReportCreateStreamCallback, warnings)
        Catch e As Exception
            MessageBox.Show("error :: " & e.Message)
        End Try
    End Sub

    Private Function LocalReportCreateStreamCallback(ByVal name As String, ByVal extension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
        Dim stream As MemoryStream = New MemoryStream()
        m_pages.Add(stream)
        Return stream
    End Function

    Private Function CreateEMFDeviceInfo() As String
        Dim paperSize As PaperSize = m_pageSettings.PaperSize
        Dim margins As Margins = m_pageSettings.Margins
        Return String.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat>
                                                            <StartPage>0</StartPage>
                                                            <EndPage>0</EndPage>
                                                            <MarginTop>{0}</MarginTop>
                                                            <MarginLeft>{1}</MarginLeft>
                                                            <MarginRight>{2}</MarginRight>
                                                            <MarginBottom>{3}</MarginBottom>
                                                            <PageHeight>{4}</PageHeight>
                                                            <PageWidth>{5}</PageWidth>
                                                            </DeviceInfo>", ToInches(margins.Top),
                                                            ToInches(margins.Left), ToInches(margins.Right),
                                                            ToInches(margins.Bottom), ToInches(paperSize.Height),
                                                            ToInches(paperSize.Width))


    End Function

становится

     Private Sub RenderAllLocalReportPages(ByVal localReport As LocalReport)
    Try
        Dim pageHeight, pageWidth as Integer
        'Set values
        '....

        Dim deviceInfo As String = CreateEMFDeviceInfo(pageHeight,pageWidth)
        Dim warnings As Warning()
        localReport.Render("IMAGE", deviceInfo, AddressOf LocalReportCreateStreamCallback, warnings)
    Catch e As Exception
        MessageBox.Show("error :: " & e.Message)
    End Try
End Sub

Private Function LocalReportCreateStreamCallback(ByVal name As String, ByVal extension As String, ByVal encoding As Encoding, ByVal mimeType As String, ByVal willSeek As Boolean) As Stream
    Dim stream As MemoryStream = New MemoryStream()
    m_pages.Add(stream)
    Return stream
End Function

Private Function CreateEMFDeviceInfo(PageHeight As Integer, PageWidth as Integer) As String
    Dim paperSize As PaperSize = m_pageSettings.PaperSize
    Dim margins As Margins = m_pageSettings.Margins
    Return String.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat>
                                                        <StartPage>0</StartPage>
                                                        <EndPage>0</EndPage>
                                                        <MarginTop>{0}</MarginTop>
                                                        <MarginLeft>{1}</MarginLeft>
                                                        <MarginRight>{2}</MarginRight>
                                                        <MarginBottom>{3}</MarginBottom>
                                                        <PageHeight>" & PageHeight & "</PageHeight>
                                                        <PageWidth>" & PageWidth & "</PageWidth>
                                                        </DeviceInfo>", ToInches(margins.Top),
                                                        ToInches(margins.Left), ToInches(margins.Right),
                                                        ToInches(margins.Bottom), ToInches(paperSize.Height),
                                                        ToInches(paperSize.Width))


End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...