L'errore già te l'ho spiegato....
Rubik ha scritto:
L'errore ce l'hai perchè la proprietà FormatPrewiew.Image è Null.
Perché è Null? perché non gli assegni mai un'immagine, nel senso che quando premi il button: BtnPrnt, non richiami la funzione: Sub PaperPrewiewToPrint() che gli dovrebbe assegnare un'immagine...
Visto che non è stato sufficiente dettaglio di più:
quando il programma è in esecuzione e premi il bottone:
BtnPrnt, il codice che viene eseguito contiene l'istruzione:
ppd.Document = PrintDocument1
significa che la successiva:
ppd.ShowDialog(), aprirà una finestra di dialogo con l'anteprima dell'immagine recuperata nella routine:
Private Sub PrintDocument1_PrintPage
Cosa c'è scritto in questa routine?:
e.Graphics.DrawImage(FormatPrewiew.Image, 30, 30)
Visto che alla pressione del button:
BtnPrnt, la proprietà
FormatPrewiew.Image non è mai stata inizializzata, è
Null e ricevi l'errore.
prova questo codice, modificalo per ottenere il tuo risultato, se non riesci chiedi.
Imports ThoughtWorks.QRCode.Codec
Imports System.Drawing.Printing
' installare NuGet: ThoughtWorks.QRCode di haoersheng
Public Class Form1
Public QRcodeimg As Image
Private Sub BtnPrnt_Click(sender As Object, e As EventArgs) Handles BtnPrnt.Click
Dim ppd As New PrintPreviewDialog
ppd.Document = PrintDocument1
PrintDocument1.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
ppd.WindowState = FormWindowState.Maximized
ppd.ShowDialog()
End Sub
Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
e.Graphics.DrawImage(Viewer.Image, 30, 30)
End Sub
Private Sub TxtQR_TextChanged(sender As Object, e As EventArgs) Handles TxtQR.TextChanged
creaQRimage()
PaperPreviewToPrint()
End Sub
Private Sub TxtMex_TextChanged(sender As Object, e As EventArgs) Handles TxtMex.TextChanged
creaQRimage()
PaperPreviewToPrint()
End Sub
Private Sub creaQRimage()
Try
Dim QRcode As New QRCodeEncoder
QRcode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE
QRcode.QRCodeForegroundColor = Color.Black
QRcode.QRCodeBackgroundColor = Color.White
QRcode.QRCodeVersion = 7
QRcode.QRCodeScale = 4
QRcode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H
QRcodeimg = QRcode.Encode(TxtQR.Text)
Me.Text = QRcodeimg.Size.ToString
Catch ex As Exception
MsgBox($"Error: {ex.Message}")
End Try
End Sub
Sub PaperPreviewToPrint()
Dim BB As Bitmap = New Bitmap(200, 350, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(BB)
' g.DrawImage(My.Resources.Background, 0, 0, 200, 350) ' togli il rem per aggiungere il tuo sfondo
Dim f As New StringFormat
f.Alignment = StringAlignment.Center
g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
g.DrawImage(QRcodeimg, 10, 10, QRcodeimg.Width, QRcodeimg.Height)
g.DrawString(Now.ToString(), New Font("Consolas", 12, FontStyle.Bold), Brushes.Black, BB.Width / 2, 210, f)
g.DrawString(TxtMex.Text, New Font("Consolas", 12, FontStyle.Bold), Brushes.Black, BB.Width / 2, 230, f)
Viewer.Image = BB
End Sub
End Class
Il codice è il tuo, ho tolto il superfluo e corretto gli errori.
Nel form ci sono:
- picturebox: Viewer 200x350