tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルPrintPageイベントを発生させる方法
記事No6862
投稿日: 2008/01/18(Fri) 18:47
投稿者k58
お世話になります、.Netの初心者です。よろしくお願いします。

.Netの PrintDocumentを使って、印刷について、上手く行きませんでした。
やりたいことが、SQLを発行して、検索結果をプレビューします。一回目にFormを呼び出されて、上手くプレビューできますが、問題は、呼び出されたFormに、検索条件を変えて、2回目にPrintPageイベントを呼び出せれません。
任意のタイミングで、PrintPageイベントを発生させる方法が分かりませんでした。

VS2005+XP 環境です。ご指導をよろしくお願いします。

[ツリー表示へ]
タイトルRe: PrintPageイベントを発生させる方法
記事No6867
投稿日: 2008/01/20(Sun) 08:17
投稿者花ちゃん
何方からも回答が無いのは、何がやりたくて、現状はどのようにしていて、どうなって
いるのかが、これを見ている人には伝わらないからです。

>PrintPageイベントを発生させる方法
上記は、やりたい事ではなく、貴方が、やりたい事を実現させる為に考えた、方法の
話で、本来は、印刷する為に貴方がどのようなコードを書いて、どこが拙くて印刷
出来ないかが問題かと思うのでその辺がこれを見ている人に伝わるように、事象を再現
できる簡単なコード書いて投稿でもされないとレスがつかないかと。

想像するに下記と同様な事だとは思うのですが。

 http://hanatyan.sakura.ne.jp/bbs/wforum.cgi?mode=allread&no=1910

[ツリー表示へ]
タイトルRe^2: PrintPageイベントを発生させる方法
記事No6870
投稿日: 2008/01/21(Mon) 11:34
投稿者k58
> 何方からも回答が無いのは、何がやりたくて、現状はどのようにしていて、どうなって
> いるのかが、これを見ている人には伝わらないからです。
>
> >PrintPageイベントを発生させる方法
> 上記は、やりたい事ではなく、貴方が、やりたい事を実現させる為に考えた、方法の
> 話で、本来は、印刷する為に貴方がどのようなコードを書いて、どこが拙くて印刷
> 出来ないかが問題かと思うのでその辺がこれを見ている人に伝わるように、事象を再現
> できる簡単なコード書いて投稿でもされないとレスがつかないかと。
>
> 想像するに下記と同様な事だとは思うのですが。
>
>  http://hanatyan.sakura.ne.jp/bbs/wforum.cgi?mode=allread&no=1910



花ちゃん 様
自分の説明が不足なので、申し訳ございません。目的が、一つの画面(フォーム)で、検索条件を変えながら、売上のプレビュー結果を確認したいのことです。フォームのLoad時点で、プレビューできますが、それ以後に画面の更新できません。Buttonの押す動作をPrintPageと連動できません。PrintPageが二度と発生しません。
説明の為に、コートの抜粋をリストします。どこが問題があるのがご指導を宜しくお願いします。

'-----------------------------------------

Public Class Form1

    Dim mPrintd As New System.Drawing.Printing.PrintDocument
    Dim mPpc As New PrintPreviewControl
    Dim mData As String
    Dim mRowOfPage As Integer = 30
    Dim mCurrentRow As Integer
    Dim mKikan1 As New DateTimePicker '集計期間
    Dim mKikan2 As New DateTimePicker '集計期間

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        'mKikan1, mKikan2 集計期間を変えれば、ここから再プレビューしたいですが、上手く行かない PrintPage を発生させないです
    End Sub

    Private Sub mPrintd_PrintPage(ByVal sender As Object, _
            ByVal e As Printing.PrintPageEventArgs)
        Dim g As Graphics = e.Graphics
        g.PageUnit = GraphicsUnit.Point
        mCurrentRow = 10
        g.DrawString(mData, New Font("MS Pゴシック", 12), Brushes.Black, 20, 25)

        If mCurrentRow < mRowOfPage Then
            e.HasMorePages = False
        Else
            e.HasMorePages = True

        End If

    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddPrintDocument()
        mData = "ここには売上集計の結果を表示する。" & vbCrLf & "売上集計期間を変えれば、再び、売上集計の結果をここに確認したいです"
    End Sub
    Private Sub AddPrintDocument()
        AddHandler mPrintd.PrintPage, AddressOf mPrintd_PrintPage

        Controls.Add(mPpc)

        Dim t_h As Integer = Button1.Top + Button1.Height
        mPpc.Location = New Point(0, t_h)
        mPpc.Size = New Size(Me.Width - t_h, Me.Height - 2 * t_h)
        mPpc.Zoom = 1
        mPpc.Document = mPrintd
        mPrintd.DefaultPageSettings.Landscape = True

    End Sub

End Class
'----------------------------------------

[ツリー表示へ]
タイトルRe^3: PrintPageイベントを発生させる方法
記事No6874
投稿日: 2008/01/22(Tue) 23:31
投稿者花ちゃん

    Private Sub Button1_Click(ByVal sender As Object, _
           ByVal e As EventArgs) Handles Button1.Click
      'mKikan1, mKikan2 集計期間を変えれば、ここから再プレビューしたいですが、
      '上手く行かない PrintPage を発生させないです

      AddPrintDocument()
      mData = "集計期間を変えれば、ここから再プレビュー" & vbCrLf & _
                "したいですが、上手く行かない"
      mPpc.InvalidatePreview()
   End Sub

又は

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   PrintPreviewControl1.Document = PrintDocument1
   PrintPreviewControl1.InvalidatePreview()
End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System. _
            Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
   Dim g As Graphics = e.Graphics
   g.DrawString(TextBox1.Text, _
             New Font("MS Pゴシック", 40), Brushes.Black, 0, 0)
End Sub
End Class

[ツリー表示へ]
タイトルRe^4: PrintPageイベントを発生させる方法
記事No6875
投稿日: 2008/01/23(Wed) 09:21
投稿者k58
花ちゃん 様
さすがにですね。PrintPreviewControlのInvalidatePreview()を利用して、上手く表示できました。
やはり自分が勉強不足ですね。
とても助かりました。ありがとうございました。

[ツリー表示へ]