10.TextBox のテキストを複数ページにわたっての印刷(23_Txt_10) (旧、SampleNo.119) |
1.TextBox のテキストを複数ページ(ページ設定を反映して)にわたっての印刷 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :追加なし 参照設定:追加なし 使用コン:Button1 / Button2 / PrintDocument1 / TextBox1 トロール: このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.TextBox のテキストを複数ページ(ページ設定を反映して)にわたっての印刷 |
Private printerPageSetting As New System.Drawing.Printing.PageSettings Private printText As String '印刷するテキスト Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim printFont As Font = TextBox1.Font 'TextBox のフォントで印刷 Dim newStrFormat As New StringFormat '行間等の文字列の書式情報を表すオブジェクト Dim charsFitted As Integer '文字列の文字数 Dim linesFilled As Integer '文字列のテキスト行数 Dim measureString As String '1ページ内の文字列 'ページ設定で指定した印刷領域を確保する Dim rect As New RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height) '1ページ内に印刷できる文字数・行数を調べる為の領域を定義 Dim layoutSize As New SizeF(e.MarginBounds.Width, e.MarginBounds.Height - printFont.GetHeight(e.Graphics)) 'テキストが最も近い語にトリムされるよう指定する(印刷範囲のカット時の処理) newStrFormat.Trimming = StringTrimming.Word '指定したFontオブジェクトで印刷した場合の1ページ内に収まる文字列を計測 e.Graphics.MeasureString(printText, printFont, layoutSize, newStrFormat, charsFitted, linesFilled) '指定の長さ(1ページに収まる)の文字列を取得 measureString = printText.Substring(0, charsFitted) '指定した位置に指定した Brush と Font で指定した文字列を印刷 e.Graphics.DrawString(measureString, printFont, Brushes.Black, rect, newStrFormat) '次ページに印刷する文字があるかどうかを調べる If charsFitted < printText.Length Then printText = printText.Substring(charsFitted) '追加のページに印刷する文字列 e.HasMorePages = True '追加のページを印刷する場合は true Else e.HasMorePages = False '追加のページは印刷しない False printText = TextBox1.Text End If End Sub Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave printText = TextBox1.Text End Sub Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click 'ページ設定ダイアログの設定及び表示 '現在のページ設定ダイアログの設定を指定 printText = TextBox1.Text Using PageSetupDialog1 As New PageSetupDialog With printerPageSetting.Margins .Left = CInt(.Left * 2.54 / 10) * 10 .Top = CInt(.Top * 2.54 / 10) * 10 .Right = CInt(.Right * 2.54 / 10) * 10 .Bottom = CInt(.Bottom * 2.54 / 10) * 10 End With With PageSetupDialog1 .PageSettings = printerPageSetting .ShowDialog() End With End Using End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '印刷プレビューの表示 'ページ設定ダイアログの設定の内容を反映 printText = TextBox1.Text Using PrintPreviewDialog1 As New PrintPreviewDialog PrintDocument1.DefaultPageSettings = printerPageSetting With PrintPreviewDialog1 .Document = PrintDocument1 .ShowDialog() End With End Using End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 'フォントダイアログボックスを使ってのフォントの設定 Using fontDialog1 As New FontDialog With fontDialog1 .ShowColor = True 'ダイアログボックスに色の選択肢を表示 .MinSize = 8 'ユーザーが選択できる最小値を設定 .MaxSize = 24 'ユーザーが選択できる最大値を設定 .Font = TextBox1.Font '現在の設定のフォントを表示 .Color = TextBox1.ForeColor '現在の設定のフォントカラーを表示 'ダイアログボックスを表示しOKボタンが押されたら If .ShowDialog = Windows.Forms.DialogResult.OK Then TextBox1.Font = .Font 'ダイアログボックスでの設定を TextBox1.ForeColor = .Color 'テキストボックスのフォントに設定 End If End With End Using End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'テキストファイルを現在のエンコード(シフトJIS)で開く Using sr As New System.IO.StreamReader("..\..\..\data\test.txt", System.Text.Encoding.Default) 'TextBox に読込み表示 TextBox1.Text = sr.ReadToEnd End Using End Sub 図1.上記実行結果 今回は、複数ページにわたっての印刷設定方法を目的にサンプルを作っておりますので、プリンターの設定やプリンターの印刷マージン等は省略しています。 テキストの印刷が目的なら RichTextBox を使って、(RichTextBox コントロールの内容を印刷する方法)印刷した方がカラー表示等の印刷もできるので、TextBox での印刷は、単純、簡単にした方がと思い、後はご自由に付加機能を追加して下さい。 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
テキストボックス テキストボックス |