DOBON.NET DOBON.NETプログラミング掲示板過去ログ

印刷処理について質問!!!

分類:[.NET]

皆様。お疲れ様です。よしねです。
印刷についての質問なんですが、
VB6.0での印刷処理がprinterオブジェクトを使用して

<VB6.0>
Private Sub Print_Click()
Dim wkstring As String '印刷文字

'印刷する文字列を設定する。
wkstring = "よしね"

'印刷設定を行なう。(実際は関数にしていて実際は見えないようにする)
Printer.Print wkstring
Printer.CurrentX = 0
Printer.CurrentY = 0

'印刷する
Printer.EndDoc

End Sub

のように「文字設定」→「印刷」の流れで印刷を行なえていたと思うのですが、
VB.NETではどこを調べてみても

<VB.NET>
Public Sub Print_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'PrintDocumentオブジェクトの作成
Dim pd As New System.Drawing.Printing.PrintDocument


'PrintPageイベントハンドラの追加]
'AddHandler pd.PrintPage, AddressOf pd_PrintPage

'印刷を開始する
pd.Print()

End Sub

Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)

Dim w_CurrentX1 As Integer
Dim w_CurrentY1 As Integer
Dim wkString As String
Dim printfont As Font

     'フォント指定
     printfont = New Font("MS ゴシック", 10)

     '文字列設定
wkString= "よしね"


e.Graphics.DrawString(wkString, printfont, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top, New StringFormat)

End Sub

のように「印刷開始」→「文字列設定」の流れになります。
VB6.0のときのように、印刷物を先に設定してから、印刷を開始する
ような流れを.NETで実現はできないんでしょうか?皆様のご判断と
もしやり方があれば、知恵をお借りしたいと思っています。よろしく
お願いします。
■No1947に返信(よしねさんの記事)
> VB6.0のときのように、印刷物を先に設定してから、印刷を開始する
> ような流れを.NETで実現はできないんでしょうか?

基本的には、自分でクラスを作成するということになるでしょう。
よしねさんのコードをそのまま利用して新しいクラスMyPrintを作ると、
次のようになります。

Public Class MyPrint
    Private wkString As String
    Public Property [String]()
        Get
            Return wkString
        End Get
        Set(ByVal Value)
            wkString = Value
        End Set
    End Property

    Public Sub New()
        wkString = ""
    End Sub

    Public Sub EndDoc()
        'PrintDocumentオブジェクトの作成
        Dim pd As New System.Drawing.Printing.PrintDocument

        'PrintPageイベントハンドラの追加]
        AddHandler pd.PrintPage, AddressOf pd_PrintPage

        '印刷を開始する
        pd.Print()
    End Sub

    Private Sub pd_PrintPage(ByVal sender As Object, _
    ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        Dim w_CurrentX1 As Integer
        Dim w_CurrentY1 As Integer
        Dim printfont As Font

        'フォント指定
        printfont = New Font("MS ゴシック", 10)

        e.Graphics.DrawString(wkString, printfont, Brushes.Black, _
            e.MarginBounds.Left, e.MarginBounds.Top, New StringFormat)
    End Sub
End Class

このクラスを使用するには、次のようにします。

Dim p As New MyPrint
'文字列設定
p.String = "よしね"
'印刷を開始する
p.EndDoc()
■No1957に返信(管理人さんの記事)
> 基本的には、自分でクラスを作成するということになるでしょう。
> よしねさんのコードをそのまま利用して新しいクラスMyPrintを作ると、
> 次のようになります。
>
> Public Class MyPrint
> Private wkString As String
> Public Property [String]()
> Get
> Return wkString
> End Get
> Set(ByVal Value)
> wkString = Value
> End Set
> End Property
>
> Public Sub New()
> wkString = ""
> End Sub
>
> Public Sub EndDoc()
> 'PrintDocumentオブジェクトの作成
> Dim pd As New System.Drawing.Printing.PrintDocument
>
> 'PrintPageイベントハンドラの追加]
> AddHandler pd.PrintPage, AddressOf pd_PrintPage
>
> '印刷を開始する
> pd.Print()
> End Sub
>
> Private Sub pd_PrintPage(ByVal sender As Object, _
> ByVal e As System.Drawing.Printing.PrintPageEventArgs)
> Dim w_CurrentX1 As Integer
> Dim w_CurrentY1 As Integer
> Dim printfont As Font
>
> 'フォント指定
> printfont = New Font("MS ゴシック", 10)
>
> e.Graphics.DrawString(wkString, printfont, Brushes.Black, _
> e.MarginBounds.Left, e.MarginBounds.Top, New StringFormat)
> End Sub
> End Class
>
> このクラスを使用するには、次のようにします。
>
> Dim p As New MyPrint
> '文字列設定
> p.String = "よしね"
> '印刷を開始する
> p.EndDoc()

いつもお世話になっております。管理人さん回答ありがとうございます。
管理人さんに教えていただいたとおりに作成したところ見事動作しました。
ありがとうございます。
あともう一つだけ質問があるのですが、本当に申し訳ないですが、お願いします。
上の例は文字列を1行表示するだけのプログラムでしたが、これが複数行や画像も
一緒に印字するとなると、私のイメージ的には

Dim p As New MyPrint
'文字列設定
p.String = "よしね"
p.String = "管理人さん"

'印刷を開始する
p.EndDoc()

としてしまうと当然「管理人さん」という文字列しか印字されなくなって
しまいますよね。これを同時に印字する方法はないでしょうか?
理想系は

Dim p As New MyPrint

'文字列(複数設定)

'画像印字設定(複数設定)

'印刷を開始する
p.EndDoc()

のような感じです。私自身も昨夜から考えていたのですが、いい方法が
思いつきません。またお時間があるときでいいんで、知恵をお貸しください。
大変申し訳ないですが、よろしくお願いします。
管理人さんへ
お疲れ様です。よしねです。
なんか構造体を使えばいけそうです。
また何かわからないことがあれば、
カキコさせていただきます。
ご協力ありがとうございました。
またよろしくお願いします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板