6.[ページ設定]ダイアログボックスの使用方法(28_Dia_06) (旧、SampleNo.056) |
1.印刷するまでの印刷設定の概略の流れ 2.[ページ設定]ダイアログを使ってページ関連の印刷設定をユーザーが変更できるようにする 3.PageSettings 等の印刷関係の設定値の設定状況を取得(参考) 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 :System.Drawing.Printing 参照設定:追加なし 使用コン:Button1 〜Button4 / TextBox4 / PictureBox1 配置図参照 トロール: このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.印刷するまでの印刷設定の概略の流れ |
1.印刷設定で用紙サイズや印刷時の用紙の向き等をユーザーに選択させる場合は、[ページ設定]ダイアログボックス等を表示してユーザーに 選択してもらう必要があります。 2.[ページ設定]ダイアログボックスでユーザーが選択・設定した内容を[PrintDocument1_PrintPage イベント]等に記入する印刷設定に反映 させる必要があります。 3.[ページ設定]ダイアログボックスでの設定値を印刷設定や印刷プレビュー画面に反映させるには設定値を記録しておく必要があります。 4.設定値を記録保存するには、PageSettings クラス等を使用します、ここでは、PrintDocument クラスの DefaultPageSettings プロパティに保存するようにして簡略化を図っております。 PageSettings クラスやでは、DefaultPageSettings プロパティでは、下記のようなプロパティが用意されていて、取得や設定する事が できます。 参考、私の通常使うプリンターでの Default の設定値の取得結果です。 下記の PageSettings 等の印刷関係の設定値の設定状況を取得で取得確認できますので各自の環境で確認して見て下さい。
太字のプロパティは、[ページ設定]のダイアログボックスで、ユーザーが直接変更できる部分です。 5.[ページ設定]のダイアログボックスを表示する前に、PageSetupDialog1.PageSettings = PrintDocument1.DefaultPageSettings のように して[ページ設定]のダイアログボックスに PageSettings の設定値を反映させておく必要があります。 6.[ページ設定]のダイアログボックスでユーザーが設定を変更した部分を .DefaultPageSettings に反映させておきます。 8.印刷余白や印刷方向や印刷の状態を確認するには、[印刷プレビュー]ダイアログボックスを使用します。 9.[印刷プレビュー]ダイアログボックスを表示する前に、PrintPreviewDialog1.Document = PrintDocument1 のように反映させておくと、 これまでの設定値が反映された状態の印刷プレビュー画面が表示されます。 10.ここまでの流れをみたら解るように、設定値をきちんと反映させるようにしないと Default の設定値で印刷してしまう事になります。 (いきなり、印刷プレビュー画面を表示して、印刷プレビューの画面から印刷した場合等) 11.従って、ここでは[印刷プレビュー]ダイアログボックスのタイトル部分に設定値の主要内容を表示するようにしています。 12.上記の部分等でユーザーが設定できない、印刷設定は、[印刷]ダイアログボックスを使って設定してもらいます。 13.ここでも、[印刷]ダイアログボックスを表示する前に、PrintDialog1.Document = PrintDocument1 のようにして反映させてから表示し、 [OK]ボタンがおされたら、PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings のようにして設定値を反映させてから、 [印刷プレビュー]ダイアログボックスを表示し、ユーザーに設定値が反映されている事を確認してもらってから印刷するようにしています。 現状では、[印刷]ダイアログボックスの印刷のボタンをクリックしないと印刷できない設定にしています。 (ユーザーが設定値を目で確認してからでないと印刷出来ないのでミスプリントが少なくなるかと思います。) 14.以上の設定をするには、[印刷プレビュー]のダイアログボックスや[印刷]ダイアログボックスを使用する事になりますので、そちらの 設定方法も合わせてご覧下さい。 お断り、ここの掲載は、ダイアログボックス関係の掲載が主題となっておりますので、印刷設定関係は、[印刷関係]の方をご覧下さい。 但し、[印刷関係]の方で掲載している印刷関係のダイアログボックス関係の設定方法は、古いコードのままになっているかも知れませんので、 こちらの方を参考にして下さい。 |
2.[ページ設定]ダイアログを使ってページ関連の印刷設定をユーザーが変更できるようにする |
Public WithEvents PrintDocument1 As New PrintDocument Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '[ページ設定]ダイアログの表示・設定へ Call sPageSetting(PrintDocument1) End Sub Public Sub sPageSetting(ByRef printDoc As PrintDocument) '[ページ設定]ダイアログを使ってページ関連の印刷設定をユーザーが変更できるようにする 'ダイアログの表示時の単位は、mm なので mm に変換して表示 With printDoc.DefaultPageSettings.Margins '1/100 インチ単位 なので mm 変換して設定 .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 'PageSetupDialog クラスのインスタンスを作成(ツールボックスから貼り付ける場合は必要ありません) Dim PageSetupDialog1 As New PageSetupDialog '[ページ設定]ダイアログの設定値に、printerPageSetting.Margins の設定値を反映 PageSetupDialog1.PageSettings = printDoc.DefaultPageSettings 'ページ設定ダイアログの設定 OK ボタンがクリックされたらプレビュー表示 If PageSetupDialog1.ShowDialog() = DialogResult.OK Then 'ここで、PrintDocument にも同様に反映させておくと印刷プレビューの表示にも反映される printDoc.DefaultPageSettings = PageSetupDialog1.PageSettings '印刷プレビューの表示へ(お好みで) Call sPrintPreview(printDoc) Else 'キャンセルした場合は、元に(インチ)戻す With printDoc.DefaultPageSettings.Margins .Left = CInt(.Left * 0.394) .Top = CInt(.Top * 0.394) .Right = CInt(.Right * 0.394) .Bottom = CInt(.Bottom * 0.394) End With End If PageSetupDialog1.Dispose() End Sub |
3.PageSettings 等の印刷関係の設定値の設定状況を取得 |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 'ご自分の環境でどのように設定されているのか確かめて見て下さい。 With PrintDocument1.PrinterSettings Console.WriteLine("CanDuplex = {0}", .CanDuplex) Console.WriteLine("Collate = {0}", .Collate) Console.WriteLine("Copies = {0}", .Copies) Console.WriteLine("Duplex = {0}", .Duplex) Console.WriteLine("FromPage = {0}", .FromPage) Console.WriteLine("IsDefaultPrinter = {0}", .IsDefaultPrinter) Console.WriteLine("IsPlotter = {0}", .IsPlotter) Console.WriteLine("IsValid = {0}", .IsValid) Console.WriteLine("LandscapeAngle = {0}", .LandscapeAngle) Console.WriteLine("MaximumCopies = {0}", .MaximumCopies) Console.WriteLine("MaximumPage = {0}", .MaximumPage) Console.WriteLine("MinimumPage = {0}", .MinimumPage) Console.WriteLine("PaperSizes = {0}", .PaperSizes) Console.WriteLine("PaperSources = {0}", .PaperSources) Console.WriteLine("PrinterName = {0}", .PrinterName) Console.WriteLine("PrinterResolutions = {0}", .PrinterResolutions) Console.WriteLine("PrintFileName = {0}", .PrintFileName) Console.WriteLine("PrintRange = {0}", .PrintRange) Console.WriteLine("PrintToFile = {0}", .PrintToFile) Console.WriteLine("SupportsColor = {0}", .SupportsColor) Console.WriteLine("ToPage = {0}", .ToPage) End With Console.WriteLine("") Console.WriteLine("") 'With printerPageSetting With PrintDocument1.DefaultPageSettings Console.WriteLine("Bounds = {0}", .Bounds) Console.WriteLine("Color = {0}", .Color) Console.WriteLine("HardMarginX = {0}", .HardMarginX) Console.WriteLine("HardMarginY = {0}", .HardMarginY) Console.WriteLine("Landscape = {0}", .Landscape) Console.WriteLine("Margins = {0}", .Margins) Console.WriteLine("PaperSize = {0}", .PaperSize) Console.WriteLine("PaperSize.Kind = {0}", .PaperSize.Kind.ToString) Console.WriteLine("PaperSource = {0}", .PaperSource) Console.WriteLine("PrintableArea = {0}", .PrintableArea) Console.WriteLine("PrinterResolution = {0}", .PrinterResolution) Console.WriteLine("PrinterSettings = {0}", .PrinterSettings) End With End Sub |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
ダイアログボックス Dialog Box |