Имя «Принтер» не объявлено VB6 для .NET

Я обновляю VB6 до .NET, после обновления получаю ошибку компиляции:

Name 'Printer' is not declared

Мой код в VB6 выглядит примерно так:

THeight = Printer.TextHeight("#")

Как правильно объявить принтер в .NET?

Примечание. Я попытался загрузить блок питания принтера, но не смог заставить его работать.


person nate    schedule 23.10.2014    source источник


Ответы (4)


Visual Basic 6.0 имел встроенный объект Printer, который можно было использовать без явного объявления. Напротив, библиотека совместимости принтеров ведет себя как любой другой объект .NET Framework; вы должны явно объявить объект принтера .NET Framework, прежде чем сможете его использовать.

После обновления вашего проекта вы можете добавить объект Printer следующим образом:

1) В меню «Проект» нажмите «Добавить ссылку».

2) В диалоговом окне "Добавить ссылку" на вкладке .NET щелкните Microsoft.VisualBasic.PowerPacks.Printing.Printer и нажмите кнопку ОК.

3) В редакторе кода добавьте следующую инструкцию вверху модуля, содержащего код вашего принтера Visual Basic 6.0:

Импорт Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6

4) Добавьте следующий код в начало процедуры, содержащей код принтера:

Общедоступный принтер как новый принтер

person nate    schedule 23.10.2014

Взгляните на PrintDocument в System.Drawing.Printing пространство имен.

Вы также можете найти учебник здесь, в котором рассматривается ваша проблема. .

В других ответах предлагается использовать пространство имен Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6, но согласно MSDN:

Это пространство имен позволяет запускать код принтера Visual Basic 6.0 без изменений в обновленном проекте; он не предназначен для новой разработки. Для новой разработки используйте компонент PrintDocument.

person Stijn    schedule 23.10.2014

Из MSDN:

Dim Printer As New Printer
Dim msg As String = "String to measure"
Printer.Print(Printer.TextHeight(msg) & " by " & _
    Printer.TextWidth(msg) & " twips")
Printer.EndDoc()

Полная документация здесь: http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer.textheight.aspx

person jac    schedule 23.10.2014

Печать в 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
person SSS    schedule 23.10.2014