Hei,
onko jollain syvällisempää tieto otsikossa mainitun funktion toiminnasta. Jostain syystä en saa printtiä siirtymään seuraavalle sivulla, vaan kaikki tulostuu samalle paperille. Idea ohjelmassa olisi että DataGridViewer:ssä on lista nimiä, joille kaikille tulostuisi tekstilaatikon sisältö omalle sivulleen.
Koodi:
Private Sub PrintGraphic(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)
Dim lkm As Short = 0
Dim laskuri As Short = 0
'lasketaan rivien(henkilöiden) määrä
lkm = YT_DGV.RowCount
Try
Dim x As Single = 100.0F
Dim y As Single = 290.0F
Dim width As Single = 650.0F
Dim height As Single = 200.0F
Dim drawRect As New RectangleF(x, y, width, height)
' käydään läpi kaikki listassa olevat nimet
For Each row As DataGridViewRow In YT_DGV.Rows
' kirjotietaan otsikko
ev.Graphics.DrawString("Tervehdys!", Me.titlefont, Brushes.Black, 300, 40)
'tulostetaan nimi kerrallaan
ev.Graphics.DrawString(CStr(row.Cells(1).FormattedValue), Me.PrintFont, Brushes.Black, 100, 250)
'tulostetaan kirjeen sisältö
ev.Graphics.DrawString(Me.AK_sisalto.Text, Me.PrintFont, Brushes.Black, drawRect)
laskuri += 1
' tulostetaan uusi sivu niin kauan kuin laskuri pienempi kuin rivien määrä
If laskuri < lkm Then
ev.HasMorePages = True
Else
ev.HasMorePages = False
End If
Next row
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Subtoimiva esimerkki tuli aiemmassa keskustelussa esille, sitä kannattaa tutkia.
https://www.ohjelmointiputka.net/keskustelu/
Moro.
kiitti linkistä. Mulla toisessa ohjelmassa toimiva versio tuosta koodista -> jos tulostan yhtä dokumenttiä, joka jatkuu toiselle sivulle niin no problemos. Mutta jos haluan saman tekstin usealle sivulle (henkilölle), niin johan alkaa olemaan mutkia matkassa. Tämä on oikeesti mysteeri tai ainakaan minulla potkii logiikka nyt pahasti vastaan. Eli jos teen esim. tälläisen muutoksen koodiin niin paketti menee ihan sekaisin -> kutsuu loputtomasti luokkaa(minun järjen mukaan tällä ei pitäisi olla mitään vaikutusta??). Eli laskuri toimii ja loopit toimii mutta kun päästään loppuun niin aloitetaan kaikki uudelleen alusta. Yllä olevalla koodilla(laskuri eri paikassa) sivu tehtiin vain kerran mutta kaikki tekstit samalla sivulle. Minä en nyt vaan ymmärrä.
If laskuri < lkm Then
ev.HasMorePages = True
laskuri += 1
Else
ev.HasMorePages = False
End IfLuokkaa kutsutaan näin:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
AddHandler PrintDocument1.PrintPage, AddressOf Me.PrintGraphic
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End SubAihe on jo aika vanha, joten et voi enää vastata siihen.