名称“Printer”未在VB6转.NET中声明。

5

我正在将VB6升级到.NET,在升级后,我遇到了编译错误:

Name 'Printer' is not declared

我在VB6中的代码类似于这样:

THeight = Printer.TextHeight("#")

如何在.NET中正确地声明打印机?

注意:我尝试下载了打印机Power Pack,但无法使其正常工作。

4个回答

6
Visual Basic 6.0中有一个内置的Printer对象,无需显式声明即可使用。相比之下,打印机兼容库就像任何其他.NET Framework对象一样,您必须在使用之前显式声明.NET Framework Printer对象。
升级项目后,您可以按照以下方式添加Printer对象:
1)在“项目”菜单上,单击“添加引用”。
2)在“添加引用”对话框中,在“.NET”选项卡上,单击“Microsoft.VisualBasic.PowerPacks.Printing.Printer”,然后单击“确定”。
3)在代码编辑器中,在包含Visual Basic 6.0 Printer代码的模块顶部添加以下语句:
Imports Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6
4)在包含Printer代码的过程顶部添加以下代码:
Public Printer As New Printer

4
请查看 System.Drawing.Printing 命名空间中的 PrintDocument
您还可以在此处找到涵盖您问题的教程。
其他答案建议使用 Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6 命名空间,但根据 MSDN:
“此命名空间使 Visual Basic 6.0 打印机代码能够在升级后的项目中运行而无需修改;它不适用于新开发。对于新开发,请使用 PrintDocument 组件。”

1

1
在VB.NET中打印与VB6非常不同。以下是示例代码,可帮助您入门。我建议您考虑改为“打印”到PDF,例如使用PDFSharp库。PDFSharp更像VB6打印机对象,并且您还可以获得文档的PDF附加奖励。
''' <summary>
''' Bare bones printout
''' </summary>
''' <remarks></remarks>
Public Class SimplePrintout
  'USAGE: 
  'Dim spo As New SimplePrintout
  'spo.PrintPreview()

  Public Sub Print(Optional ByVal PrinterName As String = "")

    'create the document object
    Using pdcNew As New Printing.PrintDocument

      'wire up event handlers to handle pagination
      AddHandler pdcNew.PrintPage, AddressOf PrintPage

      Using docOutput As Printing.PrintDocument = pdcNew

        If PrinterName > "" Then
          docOutput.PrinterSettings.PrinterName = PrinterName
        End If
        docOutput.Print()
      End Using
    End Using
  End Sub
  ''' <summary>
  ''' Preview the Report on screen
  ''' </summary>
  ''' <remarks></remarks>
  Public Sub PrintPreview(Optional ByVal Owner As Form = Nothing)

    'create the document object
    Using pdcNew As New Printing.PrintDocument

      'wire up event handlers to handle pagination
      AddHandler pdcNew.PrintPage, AddressOf PrintPage

      Using ppvPreview As New PrintPreviewDialog
        ppvPreview.Document = pdcNew
        ppvPreview.FindForm.WindowState = FormWindowState.Maximized
        If IsNothing(Owner) Then
          ppvPreview.ShowDialog()
        Else
          ppvPreview.ShowDialog(Owner)
        End If
      End Using
    End Using
  End Sub
  Sub PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
    Dim g As Graphics = e.Graphics 'shortcut
    Dim x As Single = e.MarginBounds.Left '"Cursor" location
    Dim y As Single = e.MarginBounds.Top  '"Cursor" location
    'g.DrawRectangle(Pens.Black, e.MarginBounds) '>>DEBUG: use this line to check margins        

    Dim fnt1 As New Font(System.Drawing.FontFamily.GenericSansSerif, 12, FontStyle.Regular, GraphicsUnit.Point)
    g.DrawString("Simple printout line 1" & vbCrLf & " after CRLF", fnt1, Brushes.Black, x, y)
    y += fnt1.GetHeight(g)
    y += fnt1.GetHeight(g)
    g.DrawString("Simple printout line 2", fnt1, Brushes.Black, x, y)
    y += fnt1.GetHeight(g)
    g.DrawString("Simple printout line 3", fnt1, Brushes.Black, x, y)
    y += fnt1.GetHeight(g)

    e.HasMorePages = False
  End Sub
End Class

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接