印刷文字のFontを変えるには?

解決


hiroshi  2009-01-02 11:35:14  No: 145584

ボタン1をクリックしてTextBoxのTextを印刷させるのに、PrintDocumentコントロールを使い、ボタン1のプロシージャには
PrintDocument1.Print()   と記述し、
PrintDocumentコントロールのプロシージャに、
e.Graphics.DrawStrings(TextBox.Text,New Font(フォントの指定),Brushes.Black,x,y)というふうに記述する説明が参考書にかれています。これはこれでうまくいったのですが、別のボタン2をクリックし、フォントやブラシを変えたいのですが、どうやったら良いのか教えて下さい。


hiroshi  2009-01-02 17:55:08  No: 145585

質問の補足
PrintDocumentコントロールの方でボタン1ボタン2を識別して、
フォントやブラシの記述を変える方法は可能だと思いますが、それだと
PrintDocumentコントロールを呼び出すイベントが少ない場合はよいのですが、
非常に多い場合や、将来の拡張性が悪いと思いますので、イベント側でフォントやブラシを変えたいのです。


魔界の仮面弁士  2009-01-03 18:31:22  No: 145586

> PrintDocumentコントロールの方でボタン1ボタン2を識別して
具体的には、どのように識別しておられるのでしょうか?

質問文を見る限り、既に実装自体はできていて、それに対して
別の実装方法を模索しているように見えますが…現在のコードが
提示されていないので、改善案の出しようがありません。

とりあえず、思いつくところでは:

(案1) ボタンごとに PrintDocument を用意する。(個別の印刷イベント)

(案2) WithEvents/Handles を使わない。処理に応じたメソッドを用意し、
  それらを AddHandler して利用するようにする。(個別のデリゲート)

(案3) どのボタンが押されたのかを、Private なフィールド変数に
  保持しておき、印刷イベント側で判定する。(描画処理の切り替え)

(案4) ボタンが押されたときに、フォントやブラシを必要な分生成し、
  それを Private なフィールド変数に割り当てて、印刷イベント側では
  それらをつかって描画処理を行うようにする。(ブラシ等の事前生成)
  
(案5) 描画を担当するクラスを別に用意しておき、ボタンが押された時点で
  そのインスタンスを生成するようにし、印刷イベントでは単に、
  そのクラスのメソッドを呼び出すだけにしておく。(描画処理の分離)


hiroshi  2009-01-04 05:17:41  No: 145587

魔界の仮面弁士さん、回答ありがとうございます。
質問の補足で説明しました様に(案1)や(案2)は気がついたのですが、
あまりにも拡張性がないように思い質問したのです。
(案4)が、私の求める方法なのですが、残念ながら50歳半ばでBisualBasicから、.NETを勉強はじめたので、この辺の所がどうしても
飲み込めなく、すみませんが具体的に教えていただけませんか?
或いは、この辺の事が説明されている資料を教えていただけませんか?


魔界の仮面弁士  2009-01-04 14:06:14  No: 145588

案4 であれば、たとえば
  Private b As Brush
  Private f As Font
なフィールド変数を用意しておき、ボタンクリック時には、
これらにブラシ/フォントをセットした上で、印刷処理を行えばよいかと。

そして PrintDocument のイベントでは、それらの変数を使って
  e.Graphics.DrawStrings(TextBox.Text, f, b, x, y)
などと描画することで、目的を達成できるかと思います。

それと、Font, Brush, Graphics 等を作成(≠取得)した後は、
それらの使用後に、後始末(Dispose メソッド)を行うようにしてください。


hiroshi  2009-01-05 03:46:13  No: 145589

魔界の仮面弁士さん、ありがとうございます、
この件に関しては解決しました

ただ、別の大きな問題が分かり、なんとかよろしくお願いします
ひとつの印刷中にフォントを変えるのはどうしたらよいかという事ですが、
別の質問になりますので、件名を改めて質問させて頂きます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加