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

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

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

Re[9]: コモンダイアログで印刷設定が、結果に反映されない


(過去ログ 73 を表示中)

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

■42383 / inTopicNo.1)  コモンダイアログで印刷設定が、結果に反映されない
  
□投稿者/ RT (177回)-(2009/10/14(Wed) 19:24:34)

分類:[C#] 

こんにちは。RTです。
C#で、プログラミングを行っております。

質問なのですが、コモンダイアログでの印刷設定が、結果に反映されません。
ページ指定、選択した範囲を印刷、縦、横の設定等です。
ページ指定、選択した範囲を印刷に関しては、全てのページを印刷してしまいます。

実際のコードは次の通りです。

// PrintDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない)
PrintDialog printDialog1 = new PrintDialog();

// PrinterSettings の新しいインスタンスを生成する (必須)
printDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings();

//印刷範囲を「ページ指定」にする
printDialog1.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// 印刷範囲で指定可能な最大ページ数を設定する
printDialog1.PrinterSettings.MaximumPage = short.MaxValue;

// 印刷範囲で指定可能な最小ページ数を設定する
printDialog1.PrinterSettings.MinimumPage = 1;

// 印刷開始ページを設定する
printDialog1.PrinterSettings.FromPage = 1;

// 印刷終了ページを設定する
printDialog1.PrinterSettings.ToPage = 1;

// [ファイルへ出力] チェックボックスをオンにする (初期値 false)
printDialog1.PrintToFile = true;

// 印刷範囲のページ指定を有効にする (初期値 false)
printDialog1.AllowSelection = true;

// 印刷範囲のページ指定を有効にする (初期値 false)
printDialog1.AllowSomePages = true;

// 部数を設定する
printDialog1.PrinterSettings.Copies = 1;

// ダイアログを表示し、戻り値が [OK] の場合は印刷の処理を実行する
if (printDialog1.ShowDialog() == DialogResult.OK)
{
//printDocument1.DefaultPageSettings.Landscape = true;
//印刷する文字列と位置を設定する
printingText = richTextBox1.Text;
printingPosition = 0;
//印刷に使うフォントを指定する
printFont = new Font("MS Pゴシック", 12);
//PrintDocumentオブジェクトの作成
System.Drawing.Printing.PrintDocument pd =
new System.Drawing.Printing.PrintDocument();
//PrintPageイベントハンドラの追加
pd.PrintPage +=
new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);

//pd.DefaultPageSettings.Landscape = true;
//印刷を開始する
pd.Print();
}

// 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
printDialog1.Dispose();

アドバイスよろしくお願いします。
引用返信 編集キー/
■42386 / inTopicNo.2)  Re[1]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (15回)-(2009/10/14(Wed) 20:01:35)
No42383 (RT さん) に返信
> こんにちは。RTです。
> C#で、プログラミングを行っております。
>
> 質問なのですが、コモンダイアログでの印刷設定が、結果に反映されません。

private void button1_Click(object sender, EventArgs e) {
 printDialog1.Document = printDocument1;
 printDialog1.UseEXDialog = false;
 if (printDialog1.ShowDialog() == DialogResult.OK) {
  MessageBox.Show(printDocument1.DefaultPageSettings.Landscape ? "横" : "縦");
 }
}

そりゃ printDialog1.ShowDialog() で設定したあとで

System.Drawing.Printing.PrintDocument pd =
new System.Drawing.Printing.PrintDocument();

新しい PrintDocument を設定しても反映はされません。
引用返信 編集キー/
■42391 / inTopicNo.3)  Re[2]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (178回)-(2009/10/14(Wed) 22:34:08)
No42386 (ヴァン さん) に返信

> private void button1_Click(object sender, EventArgs e) {
>  printDialog1.Document = printDocument1;
>  printDialog1.UseEXDialog = false;
>  if (printDialog1.ShowDialog() == DialogResult.OK) {
>   MessageBox.Show(printDocument1.DefaultPageSettings.Landscape ? "横" : "縦");

設定不可にするのではなく、ちゃんと反映されるようにしたいのです。アドバイスを参考に以下の様に変えてみました。

       // PrinterSettings の新しいインスタンスを生成する (必須)
printDialog1.PrinterSettings = new System.Drawing.Printing.PrinterSettings();

//印刷範囲を「ページ指定」にする
printDialog1.PrinterSettings.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// 印刷範囲で指定可能な最大ページ数を設定する
printDialog1.PrinterSettings.MaximumPage = 100;

// 印刷範囲で指定可能な最小ページ数を設定する
printDialog1.PrinterSettings.MinimumPage = 1;

// 印刷開始ページを設定する
printDialog1.PrinterSettings.FromPage = 1;

// 印刷終了ページを設定する
printDialog1.PrinterSettings.ToPage = 1;

// [ファイルへ出力] チェックボックスをオンにする (初期値 false)
printDialog1.PrintToFile = true;

// 印刷範囲のページ指定を有効にする (初期値 false)
printDialog1.AllowSelection = true;

// 印刷範囲のページ指定を有効にする (初期値 false)
printDialog1.AllowSomePages = true;

// 部数を設定する
printDialog1.PrinterSettings.Copies = 1;

// [ヘルプ] ボタンを表示する (初期値 false)
printDialog1.ShowHelp = false;

//印刷に使うフォントを指定する
printFont = new Font("MS Pゴシック", 12);

// ダイアログを表示し、戻り値が [OK] の場合は印刷の処理を実行する
if (printDialog1.ShowDialog() == DialogResult.OK)
{
printDocument1.Print();
}

// 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照)
printDialog1.Dispose();

ページ設定は1ページしか設定出来ません。2ページ以上設定しようとすると、警告が出ます。
選択した範囲を印刷も反映されません。縦・横の設定も反映されないようです。
引用返信 編集キー/
■42400 / inTopicNo.4)  Re[3]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (16回)-(2009/10/15(Thu) 09:49:57)
No42391 (RT さん) に返信
> 設定不可にするのではなく、ちゃんと反映されるようにしたいのです。アドバイスを参考に以下の様に変えてみました。

printDialog1 を ShowDialog() する前に、printDialog1 に printDocument1 を結びつけないと縦横などの設定が printDocument1 に反映されないでしょ。


> ページ設定は1ページしか設定出来ません。2ページ以上設定しようとすると、警告が出ます。

どんな警告が出ますか?
それ書かなきゃ誰も判りません。
引用返信 編集キー/
■42423 / inTopicNo.5)  Re[4]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (179回)-(2009/10/15(Thu) 16:35:31)
No42400 (ヴァン さん) に返信

> printDialog1 を ShowDialog() する前に、printDialog1 に printDocument1 を結びつけないと縦横などの設定が >printDocument1 に反映されないでしょ。

アドバイスありがとうございます。設定を反映する事が出来ました。

ただ、縦、横の設定をしたときに、それぞれ折り返しの設定を使い分けたいのですが、どうすればよいでしょうか?

引用返信 編集キー/
■42442 / inTopicNo.6)  Re[5]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (17回)-(2009/10/15(Thu) 19:00:06)
No42423 (RT さん) に返信
> ただ、縦、横の設定をしたときに、それぞれ折り返しの設定を使い分けたいのですが、どうすればよいでしょうか?

折り返しの設定ってなんですか?
プリントダイアログにあります?

そうじゃなくて、印刷方向が縦なら横文字数を80にし、横なら横文字数を120にするとか?
であれば、縦横の設定は判るわけですから、それを見て設定すれば良いだけだと思いますけど。
引用返信 編集キー/
■42467 / inTopicNo.7)  Re[6]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (180回)-(2009/10/16(Fri) 01:03:40)
No42442 (ヴァン さん) に返信

> であれば、縦横の設定は判るわけですから、それを見て設定すれば良いだけだと思いますけど。

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.PageUnit = GraphicsUnit.Millimeter;

//currentPageで指定されたページを描画する
Font f = new Font("Arial", 12);
e.Graphics.DrawString(richTextBox1.Text,
f, Brushes.Black, new RectangleF(0, 0, 200, 350));
}
折り返しの設定です。
ダイアログで選択した縦、横の設定がわかると言われてますが、どのようにわかるのでしょうか?



引用返信 編集キー/
■42480 / inTopicNo.8)  Re[7]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (18回)-(2009/10/16(Fri) 10:00:04)
No42467 (RT さん) に返信

縦横はプロパティを見れば判ります。

if (printDialog1.ShowDialog() == DialogResult.OK) {
 MessageBox.Show(printDocument1.DefaultPageSettings.Landscape ? "横" : "縦");
}

> //currentPageで指定されたページを描画する
> Font f = new Font("Arial", 12);
> e.Graphics.DrawString(richTextBox1.Text,
> f, Brushes.Black, new RectangleF(0, 0, 200, 350));

これであれば RectangleF で指定するサイズを変更すれば大丈夫です。
引用返信 編集キー/
■42492 / inTopicNo.9)  Re[8]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (181回)-(2009/10/16(Fri) 11:35:45)
No42480 (ヴァン さん) に返信
> ■No42467 (RT さん) に返信
>
> 縦横はプロパティを見れば判ります。
>
> if (printDialog1.ShowDialog() == DialogResult.OK) {
>  MessageBox.Show(printDocument1.DefaultPageSettings.Landscape ? "横" : "縦");
> }

printDocument1.DefaultPageSettings.Landscape がtrueになれば、縦で、falseになれば横ですか?
メッセージでどうやって横と縦の違いが出てるのでしょうか?
引用返信 編集キー/
■42494 / inTopicNo.10)  Re[9]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ επιστημη (2205回)-(2009/10/16(Fri) 11:41:50)
επιστημη さんの Web サイト
> printDocument1.DefaultPageSettings.Landscape がtrueになれば、縦で、falseになれば横ですか?
> メッセージでどうやって横と縦の違いが出てるのでしょうか?

「縦/横どっちになってるかを知る方法」ですよ?

アナタ
> ダイアログで選択した縦、横の設定がわかると言われてますが、どのようにわかるのでしょうか?
って訊いたやん。その答えです。

引用返信 編集キー/
■42495 / inTopicNo.11)  Re[9]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (19回)-(2009/10/16(Fri) 11:45:23)
No42492 (RT さん) に返信
> printDocument1.DefaultPageSettings.Landscape がtrueになれば、縦で、falseになれば横ですか?
> メッセージでどうやって横と縦の違いが出てるのでしょうか?

このプロパティで確認できますよねと言うサンプルコードなんですが...
実際に縦横の設定で折り返しの設定を変えるコードを書かなくちゃダメ?

引用返信 編集キー/
■42516 / inTopicNo.12)  Re[10]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (182回)-(2009/10/16(Fri) 19:29:21)
No42495 (ヴァン さん) に返信
> ■No42492 (RT さん) に返信

> このプロパティで確認できますよねと言うサンプルコードなんですが...
> 実際に縦横の設定で折り返しの設定を変えるコードを書かなくちゃダメ?

printDocument1.DefaultPageSettings.Landscapeは、縦に設定しても横に設定しても、返り値はfalseのようですが、どうやって判別するのでしょうか?
引用返信 編集キー/
■42519 / inTopicNo.13)  Re[11]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (20回)-(2009/10/16(Fri) 20:22:11)
No42516 (RT さん) に返信
> ■No42495 (ヴァン さん) に返信
>>■No42492 (RT さん) に返信
>
>>このプロパティで確認できますよねと言うサンプルコードなんですが...
>>実際に縦横の設定で折り返しの設定を変えるコードを書かなくちゃダメ?
>
> printDocument1.DefaultPageSettings.Landscapeは、縦に設定しても横に設定しても、返り値はfalseのようですが、どうやって判別するのでしょうか?

>アドバイスありがとうございます。設定を反映する事が出来ました。

ってありますが、縦横の設定は出来たのとちゃいまっか。


Landscape についてはMSDNなどで調べてありますよね。

その結果を基に RectangleF で描画の縦横のサイズを設定してやればいいだけです。

引用返信 編集キー/
■42553 / inTopicNo.14)  Re[12]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (183回)-(2009/10/17(Sat) 21:12:07)
No42519 (ヴァン さん) に返信

> >アドバイスありがとうございます。設定を反映する事が出来ました。
>
> ってありますが、縦横の設定は出来たのとちゃいまっか。

設定は出来ました。

> Landscape についてはMSDNなどで調べてありますよね。

横に設定した時、true、縦に設定したとき、falseとの事です。

> その結果を基に RectangleF で描画の縦横のサイズを設定してやればいいだけです。

ですから、横に設定しても、縦に設定しても、falseが帰って来ましたので、場合分けが出来ません。


引用返信 編集キー/
■42555 / inTopicNo.15)  Re[13]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ Azulean (470回)-(2009/10/17(Sat) 22:31:15)
No42553 (RT さん) に返信
> ですから、横に設定しても、縦に設定しても、falseが帰って来ましたので、場合分けが出来ません。
どんな変更をしたか、どのように確認したかを示さずに、そんなことを言われても解決できませんよ。
(土台が違う中で、「できる」「できない」言っても、平行線のままです)

printDialog1 にどのようなものを設定しているのか、どのような場所でどうやって Landscape を確認しているか、示しませんか。
引用返信 編集キー/
■42599 / inTopicNo.16)  Re[14]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (184回)-(2009/10/19(Mon) 10:55:11)
No42555 (Azulean さん) に返信
> printDialog1 にどのようなものを設定しているのか、どのような場所でどうやって Landscape を確認しているか、示しませんか。

//PrintDocumentオブジェクトの作成
System.Drawing.Printing.PrintDocument printDocument1 =
new System.Drawing.Printing.PrintDocument();
//PrintPageイベントハンドラの追加
printDocument1.PrintPage +=
new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);

//PrintDialogクラスの作成
PrintDialog pdlg = new PrintDialog();
//PrintDocumentを指定
pdlg.Document = printDocument1;

//ページ指定できるようにする
pdlg.AllowSomePages = true;
//ページ指定の最小値と最大値を指定する
pdlg.PrinterSettings.MinimumPage = 1;
pdlg.PrinterSettings.MaximumPage = 10;
//印刷開始と終了ページを指定する
pdlg.PrinterSettings.FromPage = pdlg.PrinterSettings.MinimumPage;
pdlg.PrinterSettings.ToPage = pdlg.PrinterSettings.MaximumPage;

//印刷の選択ダイアログを表示する
if (pdlg.ShowDialog() == DialogResult.OK)
{
//OKがクリックされた時は印刷する
printDocument1.Print();
}

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//ページ範囲が指定されており、始めのページのときは、
//印刷開始ページまで飛ばす
if (e.PageSettings.PrinterSettings.PrintRange ==
System.Drawing.Printing.PrintRange.SomePages &&
currentPage == 1)
{
currentPage = e.PageSettings.PrinterSettings.FromPage;
}

e.Graphics.PageUnit = GraphicsUnit.Millimeter;

//currentPageで指定されたページを描画する
Font f = new Font(ConstVall.FONTTYPE, 12);
e.Graphics.DrawString(richTextBox1.Text,
f, Brushes.Black, new RectangleF(0, 0, 200, 350));
f.Dispose();

//次のページがあるか調べる
if (currentPage >= 10 ||
(e.PageSettings.PrinterSettings.PrintRange ==
System.Drawing.Printing.PrintRange.SomePages &&
e.PageSettings.PrinterSettings.ToPage <= currentPage))
{
//次のページがないことを通知する
e.HasMorePages = false;
currentPage = 1;
}
else
{
e.HasMorePages = true;
currentPage++;
}
         
//**************************************************************************//
if(printDocument1.DefaultPageSettings.Landscape==true)
{
MessageBox.Show("縦");
}
        
        if(printDocument1.DefaultPageSettings.Landscape==false)
{
MessageBox.Show("横");
}   
//***************************************************************************//           
}

上のコードで、printDocument1.DefaultPageSettings.Landscapeの返り値によってメッセージを表示していますが、縦に設定しても、横に設定してもfalseが返ってくるので、メッセージで横が表示されます。
引用返信 編集キー/
■42602 / inTopicNo.17)  Re[15]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (21回)-(2009/10/19(Mon) 11:36:05)
こんにちは。

No42599 (RT さん) に返信

> //PrintDocumentオブジェクトの作成
> System.Drawing.Printing.PrintDocument printDocument1 =
> new System.Drawing.Printing.PrintDocument();

ここで宣言している printDocument1 と

> if(printDocument1.DefaultPageSettings.Landscape==true)

ここで使っている printDocument1 は同じものですか?

もしかして、デザイナから printDocument1 は配置してます?
デザイナから配置しているのであれば、初めの方は必要ないですよね。

引用返信 編集キー/
■42611 / inTopicNo.18)  Re[16]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ RT (185回)-(2009/10/19(Mon) 13:00:39)
No42602 (ヴァン さん) に返信
> こんにちは。
>
> ■No42599 (RT さん) に返信
>
>> //PrintDocumentオブジェクトの作成
>> System.Drawing.Printing.PrintDocument printDocument1 =
>> new System.Drawing.Printing.PrintDocument();
>
> ここで宣言している printDocument1 と
>
>> if(printDocument1.DefaultPageSettings.Landscape==true)
>
> ここで使っている printDocument1 は同じものですか?
>
> もしかして、デザイナから printDocument1 は配置してます?
> デザイナから配置しているのであれば、初めの方は必要ないですよね。

ありがとうございます。上記のとおり、いらない部分を削除させて頂いたところ、うまく設定の返り値をとる事が出来ました。

ヴァンさん、επιστημηさん、Azuleanさんありがとうございました。またアドバイスよろしくお願いします。
解決済み
引用返信 編集キー/
■42620 / inTopicNo.19)  Re[17]: コモンダイアログで印刷設定が、結果に反映されない
□投稿者/ ヴァン (23回)-(2009/10/19(Mon) 14:30:29)
2009/10/19(Mon) 14:31:26 編集(投稿者)
2009/10/19(Mon) 14:31:14 編集(投稿者)

No42611 (RT さん) に返信

解決済みなので深くは突っ込みません。

何故削除すれば設定できるようになったのか?

理解してますでしょうか?

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -