2016-07-06 2 views
0

У меня есть групповой ящик с некоторыми элементами управления, и я хочу отправить его на принтер.Как отправить содержимое группового ящика на принтер

У меня есть этот код, который создает файл bmp из группового поля. Как я могу отправить его на принтер при нажатии кнопки?

Private Sub Doc_PrintPage(sender As Object, e As PrintPageEventArgs) 
    Dim x As Single = e.MarginBounds.Left 
    Dim y As Single = e.MarginBounds.Top 
    Dim bmp As New Bitmap(Me.GroupBox1.Width, Me.GroupBox1.Height) 
    Me.GroupBox1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.GroupBox1.Width, Me.GroupBox1.Height)) 
    e.Graphics.DrawImage(DirectCast(bmp, Image), x, y) 
End Sub 

Я имею в кнопке мыши событии:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim doc As New PrintDocument() 
    doc = Doc_PrintPage() 
    Dim dlgSettings As New PrintDialog() 
    dlgSettings.Document = doc 
    If dlgSettings.ShowDialog() = DialogResult.OK Then 
     doc.Print() 
    End If 
End Sub 

Окончательного рабочего кода после советов:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    BMP = New Bitmap(GroupBox1.Width, GroupBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb) 
    GroupBox1.DrawToBitmap(BMP, New Rectangle(0, 0, GroupBox1.Width, GroupBox1.Height)) 
    Dim pd As New PrintDocument 
    Dim pdialog As New PrintDialog 
    AddHandler pd.PrintPage, (Sub(s, args) 
            args.Graphics.DrawImage(BMP, 0, 0) 
            args.HasMorePages = False 
           End Sub) 
    pdialog.ShowDialog() 
    pd.PrinterSettings.PrinterName = pdialog.PrinterSettings.PrinterName 
    pd.Print() 
End Sub 

ответ

0

Идея заключается в том, что у вас есть PrintDocument объекта, вызовите его метод Print, он вызывает событие PrintPage, вы обрабатываете это событие, а в методе обработчика вы используете GDI + для рисования того, что должно быть напечатано. Таким образом, вам необходимо избавиться от этой строки:

doc = Doc_PrintPage() 

Что это может быть возможно? Вы пытаетесь присвоить результат метода переменной PrintDocument. Чтобы это имело смысл, метод должен был бы вернуть объект PrintDocument, которого нет. Что вам нужно сделать, это зарегистрировать этот метод для обработки PrintPage событий Вашей PrintDocument:

AddHandler doc.PrintPage, AddressOf Doc_PrintPage 

Если вы сделаете это, то вам нужно удалить обработчик, а также. Лучшим вариантом было бы добавить все ваши объекты печати в форму в конструкторе, а затем создать обработчик событий PrintPage для PrintDocument так же, как вы создавали обработчики событий для Button или TextBox.

Для получения дополнительной информации о печати, вы можете найти this.

+0

открыл глаза. полезная ссылка. окончательный рабочий код, размещенный в области вопросов. –

Смежные вопросы