PrintPreviewDialog のツールバーの変更

  デフォルトの印刷ボタン



Framework 標準印刷処理 で使用している PrintPreviewDialog  ですが、失礼なくらいしょぼいツールバー。

実際は、Form に、PrintPreviewControl を実装して自作すべきなのですが、
とにかく時間の無い場合はできあいで済ませたいです。

最低限、印刷ボタンでプリンタ選択ぐらいはしたいので変更しました




  PrintPreviewDialog のツールバーの印刷ボタンでプリンタ選択を可能にする



Print_button_custom

  
Private prtDialog As PrintDialog = Nothing
' ******************************************************
' 印刷プレビューの初期処理
' ******************************************************
Private Sub preview_Load(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles preview.Load

	' ツールバーの作り直し
	' 現在の印刷アイコンを取得
	Dim tool As ToolStrip = PrintPreviewDialog1.Controls(1)
	Dim img As System.Drawing.Image = tool.Items(0).Image

	' 新しいツールバー用ボタンを作成
	Dim ToolStripButton1 As New System.Windows.Forms.ToolStripButton()
	ToolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image
	' 取得したイメージをセット
	ToolStripButton1.Image = tool.Items(0).Image
	' デザイナのコードをそのまま使っています
	ToolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta
	ToolStripButton1.Name = "ToolStripButton1"
	ToolStripButton1.Size = New System.Drawing.Size(23, 22)
	ToolStripButton1.Text = "ToolStripButton1"
	' 現在の印刷ボタンを削除
	tool.Items.RemoveAt(0)
	' 新しい印刷ボタンを追加
	tool.Items.Insert(0, ToolStripButton1)
	' ボタンにイベント登録
	AddHandler ToolStripButton1.Click, AddressOf print_start

End Sub

' ******************************************************
' 印刷ボタンの処理
' ******************************************************
Private Sub print_start(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles preview.Load

	' 作成された時に呼ばれるのでキャンセル
	If prtDialog Is Nothing Then
		prtDialog = New PrintDialog()
		prtDialog.PrinterSettings = New PrinterSettings()
		prtDialog.Document = pd
	Else
		If prtDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
			pd.Print()
		End If
	End If

End Sub

' ******************************************************
' 印刷プレビューダイアログが閉じられた時
' ******************************************************
Private Sub preview_FormClosed(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles preview.FormClosed

	prtDialog.Dispose()
	prtDialog = Nothing

End Sub
  



  簡単な古いコード( 現在の印刷ボタンを削除してツールバーの最後に追加する )

pd.Print() で呼び出される処理では、既に PrintPreviewDialog 用として実装済みです

  
Private print_toolbar_flg As Boolean = False
Private print_click As New System.EventHandler(AddressOf print_start)
Private print_click_flg As Boolean = False

' ******************************************************
' 印刷プレビューの初期処理
' ******************************************************
Private Sub preview_Load(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles preview.Load

	' デスクトップ左上
	preview.DesktopLocation = New System.Drawing.Point(0, 0)

	' 初回のみ、ツールバーの作り直し
	If Not print_toolbar_flg Then
		print_toolbar_flg = True
		Dim tool As ToolStrip = preview.Controls(1)
		Dim img As System.Drawing.Image = tool.Items(0).Image
		tool.Items.RemoveAt(0)
		tool.Items.Add("", img, print_click)
	End If

End Sub

' ******************************************************
' 印刷ボタンの処理
' ******************************************************
Private Sub print_start(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles preview.Load

	' 作成された時に呼ばれるのでキャンセル
	If Not print_click_flg Then
		print_click_flg = True
	Else
		Dim prtDialog As New PrintDialog
		prtDialog.PrinterSettings = New PrinterSettings()
		prtDialog.Document = pd
		If prtDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
			pd.Print()
		End If
	End If

End Sub

' ******************************************************
' 印刷プレビューダイアログが閉じられた時
' ******************************************************
Private Sub preview_FormClosed(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles preview.FormClosed

	print_click_flg = False

End Sub
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ