- - PR -
PageSetupDialogでプリンタ変更後のPazeSize/PaperSourceについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||||||||||
|
投稿日時: 2005-03-09 16:05
ソースに1行漏れがありましたので少し修正しました。
宜しくお願いします。 | ||||||||||||
|
投稿日時: 2005-03-09 16:48
下記のようにpsDlgのプロパティを確認するコードを追加してみましたが、
私の環境では正常に取得できているようです。
外しているかもしれませんが、psDlg.PageSettingsが変更されてもpgsPageSetには 変更が影響していないのではないでしょうか。 http://www.atmarkit.co.jp/fdotnet/onepoint/onepoint02/onepoint02_01.html | ||||||||||||
|
投稿日時: 2005-03-09 17:17
kanaiさん、レスありがとうございます。
上記のコードは当方でも正しく動作します。 Kindプロパティは標準の用紙を示しているので、正しく動作します。 問題なのは、各プリンタごとに独自に持っている用紙です。 Kindプロパティでは、custumになりますが、PaperNameが置き換えられてしまいます。結果、変更後のプリンタではどの用紙なのか判別できなくなります。(質問にも書きましたが、Kindプロパティではなく、kindがポイントです)
psDlg.PageSettingsに設定している、pgsPageSetは値を渡しているのではなく、参照を渡しているので、psDlg.PageSettingsが変更されれれば、おのずと、pgsPageSetも変更されると思います。 | ||||||||||||
|
投稿日時: 2005-03-09 18:12
すみません。思いっきりはずしてしまったようですね。
プリンタ特有の用紙サイズを指定したときに、PaperNameが書き換わってしまう現象 については確認できました。 もう私に分かりそうなことはないのですが、1つだけ質問があります。 「ウォッチで参照できるkind値」とありますが、私の環境ではウォッチウィンドウに 「kind」を指定しても、エラー(スコープ外)になるだけで値は拾えませんでした。 ウォッチウィンドウを使用した再現手順について、もう少しご説明願えますでしょうか? | ||||||||||||
|
投稿日時: 2005-03-09 18:22
kanaiさん、またまた、レスありがとうございます。
ウォッチに pgsPageSet.PaperSize とすることで、Kindプロパティとは別のkind値が参照できます。 kind値はKindプロパティがcustumの場合に、数値になります。 | ||||||||||||
|
投稿日時: 2005-03-09 18:27
再びすみません。確認方法がわかりました。
ローカル変数のウォッチで、pgsPageSetの+を展開していくと確かに Kindとkindなど、接頭辞が大文字のものと小文字のものが両方存在していました。 これはなんでしょう??ウォッチウィンドウのバグ??? ちなみに、VB.NETでは接頭辞が大文字のものしか表示されないようです。 |
1