ご教授お願い致します。
<開発環境>
.Net2003 C# クライアントアプリ(OS:XP sp2)
動的に生成したグラフイメージを印刷プレビューで
表示し印刷したいのですが、表示されたプレビュー内容
の一部ページ(実際には最後のページ)しか印刷されま
せん。 複数ページを印刷する場合、特別な設定が必要
なのでしょうか?
ソースに問題があるかもしれませんので、下記にソースを
記述しておきます。
よろしくお願いいたします。
private void JobInvitePreView()
{
try
{
// 印刷プレビューダイアログのサイズを設定します。
Size s = SystemInformation.PrimaryMonitorMaximizedWindowSize;
PreviewDlg.Width = s.Width;
PreviewDlg.Height = s.Height;
m_Cnt = 0;
PrintDocument Doc = new PrintDocument();
Doc.DefaultPageSettings.Landscape = true;
PreviewDlg.Document = Doc;
Doc.PrintPage += new PrintPageEventHandler(Doc_PrintPage);
// 印刷プレビューを表示します。
PreviewDlg.ShowDialog();
}
catch ( Exception ex )
{
throw ex;
}
}
プレビュー表示
private void Doc_PrintPage(object sender, PrintPageEventArgs e)
{
try
{
for( ; m_Cnt < this.m_ChartVal.Count;) ←m_ChartValは、ArrayList
{
if( m_Cnt + 1 < this.m_ChartVal.Count )
{
e.HasMorePages = true;
m_Cnt++;
}
else
{
e.HasMorePages = false;
}
// チャート動的生成
CmpChtJobI Chart = new CmpChtJobI();
: チャート設定処理省略・・・
// コントロールの描画位置を設定します。
Rectangle rect = new Rectangle(
e.PageBounds.X, e.PageBounds.Y, e.PageBounds.Width, e.PageBounds.Height);
Chart.ChtJobInvite.Draw( e.Graphics, rect );
break;
}
}
catch ( Exception ex )
{
throw ex;
}
}
マナー違反と知りながら
苦渋の決断で故意にマルチポストしました。
【使用上の注意】にある↓
********************************************
必ず全ての掲示板にどのように
解決したかを記述し、かつお礼を書き込んで下さい。
********************************************
は、守ります。
ご気分を害させまして申し訳ありません。
管理者の方の判断で削除されても異論はございません。
ご考慮の程、よろしくお願い致します。
っていうか
「マルチポストは行わないで下さい。」
とあります。
> マナー違反と知りながら
だとすると、ダメですね。
「誤ってマルチポストしてしまった場合には」
としっかり明記されておりますから。
今回のには当てはまりませんね。
じゃんぬねっと殿
ご指導ありがとうございます。
TO:管理者殿
ご迷惑をおかけしました。
スレッドの削除をお願い致します。
PrintDocumentでのPrintPageイベントってプレビューボタン
押下時以外に印刷ボタン押下時にも再度、呼び出されるんですね。
それで、グローバルに定義されたカウンタを初期化する必要が
あるわけですね。
確かに初期化しなかったら、プレビュー処理時の最終ページを
保持してしまってます。
カウンタ変数の初期化(=0)で解決しました。