まだ改良の余地がありそうだ。
Public Class PrintForm送り状 Const PrintParamItemCount As Integer = 9 'フォーマットのパラメータ項目数 ' ' 記載項目:印字項目の名称 主に判読性をあげるためのもの ' PrintOut:印刷するかどうか(0を指定すると印字されない項目) ' Font:印字に使う書体を指定する ' FontSize:文字の大きさ ' Rectangle:1を指定すると文字を矩形(Rectangle)の中に書く ' X1:印字開始位置(X)または矩形の座標点1 ' Y1:印字開始位置(Y)または矩形の座標点2 ' X2:矩形の座標点3 ' Y2:矩形の座標点4 ' Const PrintElementItemCount As Integer = 10 '印字項目数 ' ' 送付先_住所 ' 送付先_会社名 ' 送付先_部署担当 ' 送付先_TEL ' 依頼主_住所 ' 依頼主_会社名 ' 依頼主_部署担当 ' 依頼主_TEL ' 品名 ' 印刷枚数 ' Public _PrintDocument As System.Drawing.Printing.PrintDocument Dim PrintParam()() As String = New String(PrintParamItemCount)() {} Dim PrintElement(PrintElementItemCount) As String Private _送付先住所 As String WriteOnly Property 送付先住所() As String Set(ByVal value As String) _送付先住所 = value End Set End Property Private _送付先会社名 As String WriteOnly Property 送付先会社名() As String Set(ByVal value As String) _送付先会社名 = value End Set End Property Private _送付先部署担当 As String WriteOnly Property 送付先部署担当() As String Set(ByVal value As String) _送付先部署担当 = value End Set End Property Private _送付先TEL As String WriteOnly Property 送付先TEL() As String Set(ByVal value As String) _送付先TEL = value End Set End Property Private _依頼主住所 As String WriteOnly Property 依頼主住所() As String Set(ByVal value As String) _依頼主住所 = value End Set End Property Private _依頼主会社名 As String WriteOnly Property 依頼主会社名() As String Set(ByVal value As String) _依頼主会社名 = value End Set End Property Private _依頼主部署担当 As String WriteOnly Property 依頼主部署担当() As String Set(ByVal value As String) _依頼主部署担当 = value End Set End Property Private _依頼主TEL As String WriteOnly Property 依頼主TEL() As String Set(ByVal value As String) _依頼主TEL = value End Set End Property Private _品名 As String WriteOnly Property 品名() As String Set(ByVal value As String) _品名 = value End Set End Property Private _印刷枚数 As Integer WriteOnly Property 印刷枚数() As Integer Set(ByVal value As Integer) _印刷枚数 = value End Set End Property Public Sub New(ByVal PrinterSettings As Printing.PrinterSettings) _PrintDocument = New System.Drawing.Printing.PrintDocument _PrintDocument.PrinterSettings = PrinterSettings _PrintDocument.DefaultPageSettings.PaperSize = New System.Drawing.Printing.PaperSize("送り状", 1000, 450) AddHandler _PrintDocument.PrintPage, AddressOf PrintPage_送り状 Call initParam() PageCounter = 1 'カウンタを初期値にする End Sub Private Sub initParam() 'パラメータファイル読み込みの設定 Dim ParamFileName As String = My.Application.Info.DirectoryPath.ToString() & "\PrintParam.ini" Dim reader As New IO.StreamReader(ParamFileName, System.Text.Encoding.GetEncoding(932)) Try Dim line As String For LineCount As Integer = 0 To PrintParamItemCount line = reader.ReadLine If IsNothing(line) Then Else Dim param() As String param = line.Split(",") PrintParam(LineCount) = New String() {param(0), param(1), param(2), param(3), param(4), param(5), param(6), param(7), param(8), param(9)} LineCount += 1 Application.DoEvents() End If Next Catch ex As Exception MsgBox("印刷用パラメータの設定時にエラーが発生しました。" & vbNewLine & ex.Message) Finally reader.Close() End Try End Sub Private PageCounter As Integer '何枚分のデータを作成したかカウント Private Sub PrintPage_送り状(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) '印刷する要素の設定:PrintParamのカウンタと一緒に処理するため1からはじめる。PrintParam(0)は印字項目の名称のため PrintElement(1) = _送付先住所 PrintElement(2) = _送付先会社名 PrintElement(3) = _送付先部署担当 PrintElement(4) = _送付先TEL PrintElement(5) = _依頼主住所 PrintElement(6) = _依頼主会社名 PrintElement(7) = _依頼主部署担当 PrintElement(8) = _依頼主TEL PrintElement(9) = _品名 e.Graphics.PageUnit = GraphicsUnit.Millimeter '印刷する要素の生成 For i As Integer = 1 To PrintElementItemCount - 1 If CInt(PrintParam(i)(1)) = 1 Then '要素を印刷するかどうか?(PrintOut) If CInt(PrintParam(i)(4)) = 0 Then '要素を矩形内で折り返すかどうか?(Rectangle) e.Graphics.DrawString(PrintElement(i), New Font(PrintParam(i)(2), CInt(PrintParam(i)(3))), Brushes.Black, CInt(PrintParam(i)(5)), CInt(PrintParam(i)(6))) Else '矩形内に文字を書く e.Graphics.DrawString(PrintElement(i), New Font(PrintParam(i)(2), CInt(PrintParam(i)(3))), Brushes.Black, New Rectangle(CInt(PrintParam(i)(5)), CInt(PrintParam(i)(6)), CInt(PrintParam(i)(7)), CInt(PrintParam(i)(8)))) End If End If Next If PageCounter = _印刷枚数 Then '複数枚印字するときに次のページが必要か? e.HasMorePages = False PageCounter = 1 'カウンタを初期値にする Else e.HasMorePages = True PageCounter += 1 End If End Sub End Classふーっ 疲れた