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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.56001 の関連記事表示

<< 0 >>
■56001  印刷の制御が効きません。
□投稿者/ 裕猫 -(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();
    }
    というコードで印刷しています。
親記事 /過去ログ94より / 関連記事表示
削除チェック/

■56007  Re[1]: 印刷の制御が効きません。
□投稿者/ shu -(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変数などでどこまで印刷したかを記憶し次のイベント発生で継続出来るような
    作りにする必要があります。

記事No.56001 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56009  Re[2]: 印刷の制御が効きません。
□投稿者/ 裕猫 -(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教えていただきたいです。よろしくお願いいたします。
記事No.56001 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56012  Re[3]: 印刷の制御が効きません。
□投稿者/ shu -(2010/12/22(Wed) 14:22:44)
記事No.56001 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56013  Re[1]: 印刷の制御が効きません。
□投稿者/ shu -(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といった感じです。
記事No.56001 のレス /過去ログ94より / 関連記事表示
削除チェック/

■56014  Re[2]: 印刷の制御が効きません。
□投稿者/ 裕猫 -(2010/12/22(Wed) 15:12:30)
    No56013 (shu さん) に返信
    いろいろアドバイスありがとうございました。あとは自分でやってみます。やっていてどうしても解決できなかったときは又お聞きしますのでそのときは又よろしくお願いいたします。
記事No.56001 のレス / END /過去ログ94より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -