Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB.NET] HasMorePages:n toimintaperiaate

Sam76 [18.01.2010 11:11:38]

#

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

groovyb [18.01.2010 14:37:24]

#

toimiva esimerkki tuli aiemmassa keskustelussa esille, sitä kannattaa tutkia.

https://www.ohjelmointiputka.net/keskustelu/20127-vb-net-osa-printistä-häviää

Sam76 [19.01.2010 12:05:17]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta