1 Previous Next 

Scale up a reportviewer


Wendy Zang has shown a sample how to scale up a a reportviewer in the VB forum. I never found it and I could not find it on Internet either. Therefore thanks Wendy.
Imports System.IO
Public Class Form1
    Private WithEvents PrintPreviewDialog1 As New PrintPreviewDialog
    Private WithEvents PrintDocument1 As New System.Drawing.Printing.PrintDocument()
    Private WithEvents Printdialog1 As New PrintDialog
    Private WithEvents PageSetupDialog1 As New PageSetupDialog
 
    Private Sub preview_Click(sender As Object, e As EventArgsHandles Preview.Click
        PrintPreviewDialog1.Document = PrintDocument1
        Me.lineReader = New StringReader(TextBox1.Text)
        Try
            PrintPreviewDialog1.ShowDialog()
        Catch ee As Exception
            MessageBox.Show(ee.Message, "print error"MessageBoxButtons.OK, MessageBoxIcon.[Error])
        End Try
    End Sub
    Dim asc As New AutoSizeFormClass()
    Private Sub Form1_Load(sender As Object, e As EventArgsHandles MyBase.Load
        Me.asc.controllInitializeSize(Me)
        AddHandler PrintDocument1.PrintPage, AddressOf PrintDocument1_PrintPage
        Me.PrintDialog1.UseEXDialog = True
        Me.PrintPreviewDialog1.AutoScrollMargin = New System.Drawing.Size(0, 0)
        Me.PrintPreviewDialog1.AutoScrollMinSize = New System.Drawing.Size(0, 0)
        Me.PrintPreviewDialog1.ClientSize = New System.Drawing.Size(400, 300)
        Me.PrintPreviewDialog1.Enabled = True
        Me.PrintPreviewDialog1.Name = "printPreviewDialog1"
        Me.PrintPreviewDialog1.Visible = False
    End Sub
    Private Sub Form1_SizeChanged(sender As Object, e As EventArgs)
        Me.asc.controlAutoSize(Me)
    End Sub
 
    Dim lineReader As StringReader = Nothing
 
    Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgsHandles PrintDocument1.PrintPage
        Dim g = e.Graphics
        Dim yposition As Single = 0
        Dim count = 0
        Dim lefmargin As Single = e.MarginBounds.Left
        Dim topmargin As Single = e.MarginBounds.Top
        Dim printFont As New Font("", 10.5F, FontStyle.Bold, GraphicsUnit.Point, CByte(134))
        Dim mybrush As New SolidBrush(Color.Black)
        Dim linesperpage As Single = e.MarginBounds.Height / printFont.GetHeight(g)
        Dim line = lineReader.ReadLine()
        While count < linesperpage AndAlso String.IsNullOrEmpty(line) = False
            yposition = topmargin + (count * printFont.GetHeight(g))
            g.DrawString(line, printFont, mybrush, lefmargin, yposition, New StringFormat())
            count = count + 1
            line = lineReader.ReadLine()
        End While
        If line IsNot Nothing Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If
        lineReader = New StringReader(TextBox1.Text)
    End Sub
 
    Private Sub Pagesetup_Click(sender As Object, e As EventArgsHandles PageSetup.Click
        PageSetupDialog1.Document = PrintDocument1
        PageSetupDialog1.ShowDialog()
    End Sub
End Class
 
 
Public Class AutoSizeFormClass
    Public Structure controlRect
        Public Left As Integer
        Public Top As Integer
        Public Width As Integer
        Public Height As Integer
    End Structure
    Public oldCtrl As New List(Of controlRect)()
    Private ctrlNo As Integer = 0
    Public Sub controllInitializeSize(mForm As Control)
        Dim cR As controlRect
        cR.Left = mForm.Left
        cR.Top = mForm.Top
        cR.Width = mForm.Width
        cR.Height = mForm.Height
        oldCtrl.Add(cR)
        AddControl(mForm)
    End Sub
    Private Sub AddControl(ctl As Control)
        For Each c As Control In ctl.Controls
            Dim objCtrl As controlRect
            objCtrl.Left = c.Left
            objCtrl.Top = c.Top
            objCtrl.Width = c.Width
            objCtrl.Height = c.Height
            oldCtrl.Add(objCtrl)
            If c.Controls.Count > 0 Then
                AddControl(c)
            End If
        Next
    End Sub
    Public Sub controlAutoSize(mForm As Control)
        If ctrlNo = 0 Then
            Dim cR As controlRect
            cR.Left = 0
            cR.Top = 0
            cR.Width = mForm.PreferredSize.Width
            cR.Height = mForm.PreferredSize.Height
            oldCtrl.Add(cR)
            AddControl(mForm)
        End If
        Dim wScale As Single = CSng(mForm.Width) / CSng(oldCtrl(0).Width)
        Dim hScale As Single = CSng(mForm.Height) / CSng(oldCtrl(0).Height)
        ctrlNo = 1
        AutoScaleControl(mForm, wScale, hScale)
    End Sub
    Private Sub AutoScaleControl(ctl As Control, wScale As Single, hScale As Single)
        Dim ctrLeft0 As Integer, ctrTop0 As Integer, ctrWidth0 As Integer, ctrHeight0 As Integer
        For Each c As Control In ctl.Controls
            ctrLeft0 = oldCtrl(ctrlNo).Left
            ctrTop0 = oldCtrl(ctrlNo).Top
            ctrWidth0 = oldCtrl(ctrlNo).Width
            ctrHeight0 = oldCtrl(ctrlNo).Height
            c.Left = CInt((ctrLeft0) * wScale)
            c.Top = CInt((ctrTop0) * hScale)
            c.Width = CInt(ctrWidth0 * wScale)
            c.Height = CInt(ctrHeight0 * hScale)
            ctrlNo += 1
            If c.Controls.Count > 0 Then
                AutoScaleControl(c, wScale, hScale)
            End If
            If TypeOf ctl Is DataGridView Then
                Dim dgv As DataGridView = TryCast(ctl, DataGridView)
                Cursor.Current = Cursors.WaitCursor
                Dim widths As Integer = 0
                For i As Integer = 0 To dgv.Columns.Count - 1
                    dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells)
                    widths += dgv.Columns(i).Width
                Next
                If widths >= ctl.Size.Width Then
                    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
                Else
                    dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
                End If
                Cursor.Current = Cursors.[Default]
            End If
        Next
    End Sub
End Class




1 Previous Next