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
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[dnettool]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
25/04/09 16:38:29
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube

links

    WinOfSql( SQLの窓 )
   winofsql.jp ドメインのページは全てリンクフリーです。
   lightbox.on.coocan.jp ドメインも winofsql.jp と同様です。
   連絡先メールは、ユーザ名:lightbox、ドメイン名:nifty.com です。


プラバシーポリシー