- PR -

PageSetupDialogでプリンタ変更後のPazeSize/PaperSourceについて

1
投稿者投稿内容
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 2005-03-09 15:45
いつも参考にさせていただいております。
PageSetupDialogにて、[プリンタ設定]ボタンにて、プリンタを変更後、用紙および給紙方法を変更し、その内容を取得したいのですが、意図した内容が取得できません。
以下に、ソースと現象を記述します。

[ソース]
System.Windows.Forms.PageSetupDialog psDlg
= new System.Windows.Forms.PageSetupDialog();
System.Drawing.Printing.PageSettings pgsPageSet
= new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prsPrtSet
= new System.Drawing.Printing.PrinterSettings();
System.Windows.Forms.DialogResult drResult;

pgsPageSet.PrinterSettings = prsPrtSet;
psDlg.PageSettings = pgsPageSet;
psDlg.PrinterSettings = prsPrtSet;
drResult = psDlg.ShowDialog(Owner);

[現象]
・[プリンタ設定]ボタン押下後、プリンタを変更
・変更後のプリンタ特有の用紙・給紙方法を選択
・[OK]押下
とした場合、
pgsPageSet.PageSize を見ると、変更前のプリンタの用紙(選択した用紙とkind値(ウォッチでしか参照できません)が同じもの)になります。
PaperSourceも同様になり、変更後のプリンタの内容が取得できません。
PageSetupDialogのバグなのでしょうか?
何とかして、変更後のプリンタの用紙を取得したいのですが、何かよい方法はないでしょうか?
Kind(接頭大文字)プロパティでは、PaperKind列挙体の値しかとれず、ウォッチで参照できるkind値(接頭小文字)が使えれば、PageSizeCollectionから無理やり取得できるのですが・・・

回避方法をご存知の方がおられたらご教授ください。
宜しくお願いします。

[ メッセージ編集済み 編集者: さな 編集日時 2005-03-09 16:04 ]

[ メッセージ編集済み 編集者: さな 編集日時 2005-03-09 16:04 ]
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 2005-03-09 16:05
ソースに1行漏れがありましたので少し修正しました。
宜しくお願いします。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-09 16:48
下記のようにpsDlgのプロパティを確認するコードを追加してみましたが、
私の環境では正常に取得できているようです。

コード:
System.Windows.Forms.PageSetupDialog psDlg 
	= new System.Windows.Forms.PageSetupDialog(); 
System.Drawing.Printing.PageSettings pgsPageSet 
	= new System.Drawing.Printing.PageSettings(); 
System.Drawing.Printing.PrinterSettings prsPrtSet 
	= new System.Drawing.Printing.PrinterSettings(); 
System.Windows.Forms.DialogResult drResult; 

pgsPageSet.PrinterSettings = prsPrtSet; 
psDlg.PageSettings = pgsPageSet; 
psDlg.PrinterSettings = prsPrtSet; 
drResult = psDlg.ShowDialog(Owner);

string papersize = psDlg.PageSettings.PaperSize.Kind.ToString();
string papersource = psDlg.PageSettings.PaperSource.Kind.ToString();

MessageBox.Show ("PaperSize:" + papersize + "\n" + "PaperSource:" + papersource);




外しているかもしれませんが、psDlg.PageSettingsが変更されてもpgsPageSetには
変更が影響していないのではないでしょうか。

http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint02/onepoint02_01.html
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 2005-03-09 17:17
kanaiさん、レスありがとうございます。
引用:

kanaiさんの書き込み (2005-03-09 16:48) より:
下記のようにpsDlgのプロパティを確認するコードを追加してみましたが、
私の環境では正常に取得できているようです。

コード:

string papersize = psDlg.PageSettings.PaperSize.Kind.ToString();
string papersource = psDlg.PageSettings.PaperSource.Kind.ToString();

MessageBox.Show ("PaperSize:" + papersize + "n" + "PaperSource:" + papersource);





上記のコードは当方でも正しく動作します。
Kindプロパティは標準の用紙を示しているので、正しく動作します。
問題なのは、各プリンタごとに独自に持っている用紙です。
Kindプロパティでは、custumになりますが、PaperNameが置き換えられてしまいます。結果、変更後のプリンタではどの用紙なのか判別できなくなります。(質問にも書きましたが、Kindプロパティではなく、kindがポイントです)

引用:

外しているかもしれませんが、psDlg.PageSettingsが変更されてもpgsPageSetには
変更が影響していないのではないでしょうか。

http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint02/onepoint02_01.html



psDlg.PageSettingsに設定している、pgsPageSetは値を渡しているのではなく、参照を渡しているので、psDlg.PageSettingsが変更されれれば、おのずと、pgsPageSetも変更されると思います。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-09 18:12
すみません。思いっきりはずしてしまったようですね。

プリンタ特有の用紙サイズを指定したときに、PaperNameが書き換わってしまう現象
については確認できました。

もう私に分かりそうなことはないのですが、1つだけ質問があります。

「ウォッチで参照できるkind値」とありますが、私の環境ではウォッチウィンドウに
「kind」を指定しても、エラー(スコープ外)になるだけで値は拾えませんでした。

ウォッチウィンドウを使用した再現手順について、もう少しご説明願えますでしょうか?
さな
ベテラン
会議室デビュー日: 2004/07/27
投稿数: 59
お住まい・勤務地: 大阪・肥後橋
投稿日時: 2005-03-09 18:22
kanaiさん、またまた、レスありがとうございます。
引用:

kanaiさんの書き込み (2005-03-09 18:12) より:

もう私に分かりそうなことはないのですが、1つだけ質問があります。

「ウォッチで参照できるkind値」とありますが、私の環境ではウォッチウィンドウに
「kind」を指定しても、エラー(スコープ外)になるだけで値は拾えませんでした。

ウォッチウィンドウを使用した再現手順について、もう少しご説明願えますでしょうか?



ウォッチに
pgsPageSet.PaperSize
とすることで、Kindプロパティとは別のkind値が参照できます。
kind値はKindプロパティがcustumの場合に、数値になります。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-03-09 18:27
再びすみません。確認方法がわかりました。

ローカル変数のウォッチで、pgsPageSetの+を展開していくと確かに
Kindとkindなど、接頭辞が大文字のものと小文字のものが両方存在していました。

これはなんでしょう??ウォッチウィンドウのバグ???

ちなみに、VB.NETでは接頭辞が大文字のものしか表示されないようです。
1

スキルアップ/キャリアアップ(JOB@IT)