.NET TIPS

印刷プレビュー(ダイアログ形式)を表示するには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2007/08/02

 「TIPS:Windowsアプリケーションで印刷を行うには?」や「TIPS:複数ページの印刷を行うには?」では、Windowsアプリケーションなどで印刷を行う方法を紹介した。本TIPSでは印刷のプレビュー画面(以降、印刷プレビュー)を表示する方法を説明する。

印刷プレビュー(ダイアログ形式)の表示

 .NETアプリケーションで印刷プレビューを表示するには、ダイアログ形式の「印刷プレビュー・ダイアログ」、もしくはコントロール形式の「印刷プレビュー・コントロール」を使うことが一般的だ。本稿ではこのうち、印刷プレビュー・ダイアログの利用方法について紹介する。Windowsフォーム上に配置可能なコントロール形式の印刷プレビュー・コントロールについては後日公開予定のTIPSであらためて紹介する。

 印刷プレビュー・ダイアログはPrintPreviewDialogクラス(System.Windows.Forms名前空間)として標準で提供されている。従って、実際に印刷プレビュー・ダイアログを表示するには、WindowsフォームのコンストラクタなどでPrintPreviewDialogクラスのインスタンスを生成して利用するだけだ。PrintPreviewDialogオブジェクトのDocumentプロパティに、印刷ドキュメント・オブジェクト、すなわちPrintDocumentコンポーネント(System.Drawing.Printing名前空間)を指定し、実際に印刷プレビュー・ダイアログを表示したいタイミングでPrintPreviewDialogオブジェクトのShowDialogメソッド(パラメータなし)を呼び出せばよい。

 なお、プレビューに表示される印刷内容には、実際に印刷するときと同じPrintPageイベント・ハンドラの処理内容が利用されるので、印刷プレビュー用に印刷処理を書く必要はない(つまり、実際の印刷と印刷プレビューで、1つの印刷処理を共有できる)。

 以上の内容を実装したのが、次のサンプル・コードだ。このコードでは、Form1クラスのコンストラクタでPrintPreviewDialogオブジェクトを生成して、そのオブジェクトのDocumentプロパティにPrintDocumentコンポーネントを指定している。さらに、button1ボタンのClickイベント・ハンドラ(=button1_Clickメソッド)内でPrintPreviewDialogオブジェクトのShowDialogメソッドを呼び出している。これにより、button1ボタンがクリックされると、印刷プレビュー・ダイアログが表示されることになる。

private PrintDocument printDocument1;
private PrintPreviewDialog printPreviewDialog1;

public Form1()
{
  ……中略……
  // PrintDocumentコンポーネントの生成
  printDocument1 = new System.Drawing.Printing.PrintDocument();
  //PrintPageイベント・ハンドラの追加
  this.printDocument1.PrintPage +=
    new System.Drawing.Printing.PrintPageEventHandler(
    this.printDocument1_PrintPage);

  // PrintPreviewDialogオブジェクトの生成
  printPreviewDialog1 = new PrintPreviewDialog();
  // Documentプロパティの設定
  printPreviewDialog1.Document = printDocument1;
}

private void button1_Click(object sender, EventArgs e)
{
  // 印刷プレビューを表示
  printPreviewDialog1.ShowDialog();
}

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
  ……ここに印刷処理を記述(省略)……
}
Friend WithEvents PrintDocument1 As PrintDocument
Friend WithEvents printPreviewDialog1 As PrintPreviewDialog

Public Sub New()
  MyBase.New()
  ……中略……
  ' PrintDocumentコンポーネントの生成
  PrintDocument1 = New PrintDocument

  ' PrintPreviewDialogオブジェクトの生成
  printPreviewDialog1 = New PrintPreviewDialog
  ' Documentプロパティの設定
  printPreviewDialog1.Document = printDocument1
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  ' 印刷プレビューを表示
  printPreviewDialog1.ShowDialog()
End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
  ……ここに印刷処理を記述(省略)……
End Sub
印刷プレビュー・ダイアログを表示するサンプル・コード(上:C#、下:VB)

 次の画面は、上記のサンプル・コードを含むWindowsフォーム・アプリケーションを実行して、実際に印刷プレビュー・ダイアログを表示した例である。

印刷プレビュー・ダイアログの表示例

 このように、印刷プレビュー・ダイアログには[印刷]や[ズーム]、[1 ページ]から[6 ページ]までの表示形式などに対応するボタン、また[ページ]番号を切り替えるためのコントロールなど、基本的な操作方法が提供されている。

Visual Studio(IDE)を活用した印刷プレビュー・ダイアログの実装

 ここまでの説明では、コーディングによる実装方法を解説したが、PrintPreviewDialogオブジェクトは(PrintDocumentコンポーネントと同様に)ドラッグ&ドロップによりWindowsフォーム・デザイナで配置可能な[ツールボックス]のアイテムとして提供されているので、Visual StudioのIDEを活用してより簡単に実装することもできる。

 次の画面は実際に[ツールボックス]からPrintPreviewDialogオブジェクトを追加している例である(Visual Studio 2005の場合)。

Visual Studio(IDE)を活用した印刷プレビュー・ダイアログの実装(Visual Studio 2005の場合)
[ツールボックス]からPrintPreviewDialogオブジェクトを追加している例。
  「PrintPreviewDialog」をWindowsフォーム・デザイナ上にドラッグ&ドロップで配置すると、コンポーネント領域にPrintPreviewDialogオブジェクトが追加される。
  PrintPreviewDialogオブジェクトを選択した状態で[プロパティ]ウィンドウの「Document」プロパティの内容を編集する。あらかじめPrintDocumentコンポーネントを追加しておけば、コンボボックスにそれがリストアップされる。

 この画面のように、[ツールボックス]からPrintPreviewDialogオブジェクトを配置すると、Windowsフォーム・デザイナのコンポーネント領域に表示される。PrintPreviewDialogオブジェクトのDocumentプロパティは、[プロパティ]ウィンドウから設定できる。

 後は、任意のコード個所でPrintPreviewDialogオブジェクトのShowDialogメソッドを呼び出せば、印刷プレビュー・ダイアログが表示される。End of Article

カテゴリ:Windowsフォーム 処理対象:印刷
カテゴリ:クラス・ライブラリ 処理対象:印刷
使用ライブラリ:PrintDocumentクラス(System.Drawing.Printing名前空間)
使用ライブラリ:PrintPreviewDialogクラス(System.Windows.Forms名前空間)
関連TIPS:Windowsアプリケーションで印刷を行うには?
関連TIPS:複数ページの印刷を行うには?
関連TIPS:印刷プレビュー(コントロール形式)を表示するには?(後日公開予定)

この記事と関連性の高い別の.NET TIPS
複数ページの印刷を行うには?
Windowsアプリケーションで印刷を行うには?
複数の部数を印刷するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間