よろしくお願いします。過去ログには無かったようなので来ました。
印刷についてなのですが、
「ボタン1でプレビュー表示 → ボタン2でそれを印刷」
としたいのですが、ある定数が毎回ランダムで変化するものを
プレビューさせてから印刷すると、プレビューでの表示値と
印刷に送られる値が異なってしまいます。
おそらく 「ボタン2でそれを印刷」 の時に再度印刷を作成してしまう
からだと思いますが、何か回避方法はありますでしょうか?
コードは以下のようなものです。
デザイナ上でフォームに、Button1・Button2・PrintDocument1・PrintPreviewControl1 を貼り付けました。
プレビューでは”0”なのに、印刷では”1”となってしまいます。
Dim N As Integer
'プレビューの表示
Private Sub Button1_Click(〜) Handles Button1.Click
PrintPreviewControl1.Document = PrintDocument1
End Sub
'プリント内容の描画
Private Sub PrintDocument1_PrintPage(〜) Handles PrintDocument1.PrintPage
e.Graphics.DrawString(N.ToString, New Font("MS UI Gothic", 20), Brushes.Black, 20, 20)
N += 1
End Sub
'プレビューされているものをプリント
Private Sub Button2_Click(〜) Handles Button2.Click
PrintPreviewControl1.Document.Print()
End Sub
あ、VB.NETです。
上のコードでは N は1ずつ増やしていますが、
元々のコードではランダムで決定しています。
ボタン1でプレビュー表示をさせた値を変数等に
覚えておけばいいだけのようですが。
何か問題でもあるのでしょうか?
はい、変数に保存しておき、新たにプレビューしないDocumentを作って印刷すれば行けそうですが、印刷部分の1000行ほどのコードの中で20ほどの
変数を使い回しているので1つ1つ書き直すのはキツイのです。根性ナシですか?
具体的には、数学の様々な計算問題をランダムに自動で作成するようなアプリで、
プレビューで「このパターンいい!」と思ったものを印刷したいのです。
他の策はありますでしょうか・・・
検索→置換でランダム値を求めているところを変数に置き換えていくだけの
作業だと思いますが。
別の方法としてはプレビューに出す前にオフスクリーンのデバイスコンテキスト
に書き込んでやって、それをプレビューとプリントに使用するとかでも出来る
と思います。
>検索→置換でランダム値を求めているところを変数に置き換えていくだけの
>作業だと思いますが。
書式がバラバラなので(後悔してますが・・・)100カ所以上ある
部分を一発置換が出来ない状況です。
>別の方法としてはプレビューに出す前にオフスクリーンのデバイスコンテキスト
>に書き込んでやって、それをプレビューとプリントに使用するとかでも出来る
>と思います。
デバイスコンテキストは初耳ですが、便利そうなので今後のために調べてみます。
何とか解決できましたので、お知らせいたします。
最初のランダム関数の設定で、
Ran = New System.Random(Now.Millisecond)
とせずに、
RTime = Now.Millisecond
Ran = New System.Random(RTime)
とし、このRTimeをとっておき、同じパターンを作る時に
Ran = New System.Random(RTime)
と使ってやり、上手くいきました。最初のレスがヒントになりました。
お付き合いありがとうございました。m(_ _)m
ツイート | ![]() |