C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 印刷プレビューを自動で閉じたい


(過去ログ 111 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■66058 / inTopicNo.1)  印刷プレビューを自動で閉じたい
  
□投稿者/ ひろ (27回)-(2013/03/29(Fri) 14:09:51)

分類:[C#] 

PrintPreviewDialog ppd = new PrintPreviewDialog();
ppd.Document = this.Document;
ppd.ShowDialog();


上記で表示している印刷プレビューを、ユーザーの操作無しに
自動で閉じることはできるでしょうか?
引用返信 編集キー/
■66059 / inTopicNo.2)  Re[1]: 印刷プレビューを自動で閉じたい
□投稿者/ howling (303回)-(2013/03/29(Fri) 14:16:02)
No66058 (ひろ さん) に返信
こんにちわ。
そのppdを閉じたいタイミングのイベントで、
(sender as PrintPreviewDialog).Dispose();
で良いのではないでしょうか…?

そもそもShowDialogしなければ開かないわけですから、
何をしたいのかよくわかりませんが…。
引用返信 編集キー/
■66060 / inTopicNo.3)  Re[2]: 印刷プレビューを自動で閉じたい
□投稿者/ ひろ (28回)-(2013/03/29(Fri) 14:36:26)
2013/03/29(Fri) 14:37:46 編集(投稿者)

印刷時、ページ毎に「今のページ/総ページ」を描画したいのです。

現状、ドキュメントのPrint()を2回行い、
1回目の_PrintPage()でカウンタをインクリメントし、総ページ数を決めています。
また、1回目の_PrintPage()の最後で、

if (e.HasMorePages == false) && (1回目の場合)
{
e.Cancel = true;
}

を行い、総ページ数取得用の印刷をキャンセルしているのですが、
これだとキャンセルされる前にごみが印刷されてしまう場合があります。

そこで、1回目はプレビュー表示で印刷処理を行うことで解決できないかと考えました。

しかし、これだと、プレビュー表示をユーザーに閉じてもらわないと
印刷処理に移行できないため、今回のような質問をさせていただきました。
引用返信 編集キー/
■66061 / inTopicNo.4)  Re[3]: 印刷プレビューを自動で閉じたい
□投稿者/ howling (304回)-(2013/03/29(Fri) 14:48:49)
2013/03/29(Fri) 14:57:42 編集(投稿者)

No66060 (ひろ さん) に返信
なるほど…それならタイミングはShownイベントあたりでいけそうですが、
何かそれらしき物があるんじゃないか?と正直思っています。
軽く探してみて、見つかってませんが…。

誰か知っている人いそうだけどなぁ…。

あ、ちなみに今後は今の返信の内容のような「やりたかったこと」は書いておいた方がいいです。
もしかすると、やり方自体が誤っていたり、もっと簡単にその「やりたかったこと」を解決する手段を提供してもらえるかもしれないからです。

答える側としても複数の観点から見れますしね…。
引用返信 編集キー/
■66062 / inTopicNo.5)  Re[3]: 印刷プレビューを自動で閉じたい
□投稿者/ shu (252回)-(2013/03/29(Fri) 15:21:44)
No66060 (ひろ さん) に返信
> 2013/03/29(Fri) 14:37:46 編集(投稿者)
>
> 印刷時、ページ毎に「今のページ/総ページ」を描画したいのです。
少し前にその内容で回答していますが、実現出来なかったのでしょうか?

No65565 PrintDocument.Print で総ページ数取得 のスレより

Dim ctlPageCnt As New PreviewPrintController
Dim bakCtrl = doc.PrintController
doc.PrintController = ctlPageCnt
doc.Print()
doc.TotalPageCnt = ctlPageCnt.GetPreviewPageInfo.Length
doc.PrintController = bakCtrl
doc.Print()

このあたりは分かりましたでしょうか?

引用返信 編集キー/
■66086 / inTopicNo.6)  Re[1]: 印刷プレビューを自動で閉じたい
□投稿者/ Jitta (36回)-(2013/03/29(Fri) 23:00:50)
Jitta さんの Web サイト
No66058 (ひろ さん) に返信
 まず、PrintDocument クラスの説明を見ていただきたいのですが...
http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.printdocument(v=vs.90).aspx

 ここに、「C:\My Documents\MyFile.txt という名前のファイルを既定のプリンタで印刷するコード例」があります。
ひろさんが提示されているコードの断片では、
> if (e.HasMorePages == false) && (1回目の場合)
となっていますが、「続くページがあるかどうか」を、誰が判断しているのでしょうか。
MSDN の例では、コード上で判断しています。
> // If more lines exist, print another page.
> if(line != null)
>   ev.HasMorePages = true;
> else
>   ev.HasMorePages = false;
> }
 line は、この上で streamToPrint.ReadLine() の戻り値です。
C:\My Documents\MyFile.txt を読み込んで、ファイルの終わりに達すると line が null になります。
その時にはページの終わりであり、そうでなければ続きがある、ということですね。

 つまり、ページを描画するのは自分のコードのはずです。
データも、自分のコードで用意しているはずです。
データの総量と、1ページに印字できるデータ量の関係から、ページ数は計算できます。
印刷しようとしたり、プレビュー画面を表示したりする必要は有りません。

引用返信 編集キー/
■66088 / inTopicNo.7)  Re[2]: 印刷プレビューを自動で閉じたい
□投稿者/ ひろ (29回)-(2013/04/01(Mon) 10:26:53)
shuさんの方法でやりたいことが実現できました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -