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 Sub
toimiva 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 If
Luokkaa 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 Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.