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

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

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

Re[2]: 印刷の制御が効きません。


(過去ログ 94 を表示中)

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

■56001 / inTopicNo.1)  印刷の制御が効きません。
  
□投稿者/ 裕猫 (203回)-(2010/12/22(Wed) 11:17:58)

分類:[.NET 全般] 

開発環境
OS: WindowsXP SP3
言語: VisualStudio2008 C#

こんにちは。 いつもお世話になります。テキストを読み込んで印刷指令をしたのですが、
@用紙が横向きにならない。
A1ページしか印刷されなく全ページが印刷されない。
状態になっています。コードのどこがまずいのでしょう?
わかった方教えていただけないでしょうか?よろしくお願いいたします。

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            this.printDocument1.DefaultPageSettings.Landscape = true;
            string PW;
            char ch;
            int ky;
            System.IO.StreamReader TextFile = new System.IO.StreamReader("印刷", Encoding.GetEncoding("Shift_JIS"));
            e.HasMorePages = true;
            while (true)
            {
                PX = 0;
                PS = TextFile.ReadLine();
                if (PS == null)
                {
                    e.HasMorePages = false;
                    this.printDocument1.DefaultPageSettings.Landscape = false;
                    break;
                }
                for (int CT1 = 0; CT1 < PS.Length; CT1++)
                {
                    PW = PS.Substring(CT1, 1);
                    ch = Convert.ToChar(PW);
                    ky = (char)ch;
                    if (ky < 129)
                    { e.Graphics.DrawString(PW, new Font("MS ゴシック", 8), Brushes.Black, PX, PY * 20); PX = PX + 8; }
                    else
                    { e.Graphics.DrawString(PW, new Font("MS ゴシック", 8), Brushes.Black, PX, PY * 20); PX = PX + 16; }
                }
                PY++;
            }
            TextFile.Close();
        }
というコードで印刷しています。

引用返信 編集キー/
■56007 / inTopicNo.2)  Re[1]: 印刷の制御が効きません。
□投稿者/ shu (314回)-(2010/12/22(Wed) 12:25:37)
No56001 (裕猫 さん) に返信

PrintDocumentの使い方が違ってます。
次の順にイベントが発生します。

(1)BeginPrint ... 全体のプリンタ設定、準備などを行います。
(2)QueryPageSettings ... ページ単位のプリンタ設定を行います。
(3)PrintPage ... 1ページ分の印刷処理を行います。
(4)EndPrint      ... 後処理を行います。

(2),(3)は(3)のPrintPageイベントのPrintPageEventArgsのHasmorePagesがTrueに
設定されると継続してイベントが発生します(Falseになるまでイベントが発生)

(2)QueryPageSettings はページ毎に設定を変えなければ必要ないのでだいたい(1)(3)(4)
を使う事になるかと思います。

(3)PrintPageはあくまで1ページ分の処理だけを記述することになるので、データがたくさん
ある場合はPrivate変数などでどこまで印刷したかを記憶し次のイベント発生で継続出来るような
作りにする必要があります。


引用返信 編集キー/
■56009 / inTopicNo.3)  Re[2]: 印刷の制御が効きません。
□投稿者/ 裕猫 (204回)-(2010/12/22(Wed) 13:40:02)
No56007 (shu さん) に返信
> PrintDocumentの使い方が違ってます。
> 次の順にイベントが発生します。
>
> (1)BeginPrint ... 全体のプリンタ設定、準備などを行います。
> (2)QueryPageSettings ... ページ単位のプリンタ設定を行います。
> (3)PrintPage ... 1ページ分の印刷処理を行います。
> (4)EndPrint      ... 後処理を行います。
>
> (2),(3)は(3)のPrintPageイベントのPrintPageEventArgsのHasmorePagesがTrueに
> 設定されると継続してイベントが発生します(Falseになるまでイベントが発生)
>
> (2)QueryPageSettings はページ毎に設定を変えなければ必要ないのでだいたい(1)(3)(4)
> を使う事になるかと思います。
>
> (3)PrintPageはあくまで1ページ分の処理だけを記述することになるので、データがたくさん
> ある場合はPrivate変数などでどこまで印刷したかを記憶し次のイベント発生で継続出来るような
> 作りにする必要があります。
>
ご指摘ありがとうございます。 そうですか 調べたところではそのように書いてあるところがなかったので、printpageだけでいいと思ってました。
ところでこれらの一連の流れを書いてあるサンプルを置いてあるところをご存知でしょうか?どこでどのように指令をしているのか勉強したいのでよいところがありましたらURL教えていただきたいです。よろしくお願いいたします。
引用返信 編集キー/
■56012 / inTopicNo.4)  Re[3]: 印刷の制御が効きません。
□投稿者/ shu (316回)-(2010/12/22(Wed) 14:22:44)
No56009 (裕猫 さん) に返信

あまりいいとこが見つからなかったのですが
ここの前の内容で
http://bbs.wankuma.com/index.cgi?mode=al2&namber=53697&KLOG=90


後サンプルではないのですがこんなページもありました。
http://www.nextftp.com/swlabo/m1_vbnet/hp_kaisetu/kai_print.htm


引用返信 編集キー/
■56013 / inTopicNo.5)  Re[1]: 印刷の制御が効きません。
□投稿者/ shu (317回)-(2010/12/22(Wed) 14:40:44)
今回の内容でいくと

> this.printDocument1.DefaultPageSettings.Landscape = true;
ここは処理開始前(print or previre前)


> System.IO.StreamReader TextFile = new System.IO.StreamReader("印刷", Encoding.GetEncoding("Shift_JIS"));
ここはBeginPrint


> e.HasMorePages = true;
> while (true)
> {
> PX = 0;
> PS = TextFile.ReadLine();
> if (PS == null)
> {
> e.HasMorePages = false;
> this.printDocument1.DefaultPageSettings.Landscape = false;
> break;
> }
> for (int CT1 = 0; CT1 < PS.Length; CT1++)
> {
> PW = PS.Substring(CT1, 1);
> ch = Convert.ToChar(PW);
> ky = (char)ch;
> if (ky < 129)
> { e.Graphics.DrawString(PW, new Font("MS ゴシック", 8), Brushes.Black, PX, PY * 20); PX = PX + 8; }
> else
> { e.Graphics.DrawString(PW, new Font("MS ゴシック", 8), Brushes.Black, PX, PY * 20); PX = PX + 16; }
> }
> PY++;
> }
ここはPrintPageで1ページ分印刷したらデータの続きがあるか判断してHasMorePagesの値を決める。
1ページ分の印刷が完了したか判定するのは行数か座標で判断する。


> TextFile.Close();
ここはEndPrintといった感じです。
引用返信 編集キー/
■56014 / inTopicNo.6)  Re[2]: 印刷の制御が効きません。
□投稿者/ 裕猫 (205回)-(2010/12/22(Wed) 15:12:30)
No56013 (shu さん) に返信
いろいろアドバイスありがとうございました。あとは自分でやってみます。やっていてどうしても解決できなかったときは又お聞きしますのでそのときは又よろしくお願いいたします。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -