- PR -

印刷をより便利に行いたい(PrintDocument内から関数を呼び出す)

1
投稿者投稿内容
のんごん
会議室デビュー日: 2004/05/08
投稿数: 2
投稿日時: 2004-05-09 15:25

VB初心者です。過去にVB6.0を少しかじった事がありましたが、最近VB.NETを使うようになり、
印刷関係の使い勝手の違いに、頭を悩ませております。

印刷についての質問があります。
プリンタに文字を印刷する場合、PrintDocument内(例:Private Sub PrintDocument1_PrintPage・・の中)で
印刷したい文字(DrawString)、印刷したい線(DrawRectangle)等を延々と・・記述し、
最後にPrintDocument1.Print()を呼び出して印刷すると思います。
(私の知るVB教則本のたぐいは、上記のやり方しか載っていません。本当に、こんなやり方を
しなくてはならないのでしょうか?)

さて、上記のように、
印刷する際、毎回のように「e.Graphics.DrawString("印刷したい文字列", drawFont, DrawBrush. draw(Point)」などと
フルスペルで入力していくのはソースの可読性が悪く、汎用性もないため、
外部の関数を作り(例:Public Function strPrintOut_Function(ByVal strMOJI As String))
Sub PrintDocument1_PrintPage()の中から、その関数を呼び出すようにしたいと考えています。

私は、以下のようにプログラム(失敗作)してみたのですが、
外部の関数の中から、「e」が参照できないために、うまく機能しません。
どうすれば、同等の処理ができるようになるでしょうか?

VB.NETにおいて、とにかく印刷関係の仕様がややこしく、コーディングそのものに専念できないのが
ちょっと残念です。
私みたいな個人ユーザは高価な市販の帳票ツールなどは使えないので、なんとか自前の関数、仕組みを準備して、
印刷まわりを便利にしたいと考えています。


Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles

PrintDocument1.PrintPage

Dim drawFont As New Font("MS ゴシック", 16)
Dim drawBrush As New SolidBrush(Color.Black)
Dim drawPoint As New PointF(0, 0)

'通常は、以下のように記述すると思います。
e.Graphics.DrawString("文字列", drawFont, drawBrush, drawPoint)

'何度も、フォント、ブラシを設定するのが面倒なので、外部の関数を呼び出して汎用的に印刷できるようにしたい。
strPrintOut_Function("ABC") '例
strPrintOut_Function("CDE") '例

e.HasMorePages = False


End Sub

Public Function strPrintOut_Function(ByVal strMOJI As String)

'strMOJI=印刷したい文字列
'ただし、このプログラム例では、印刷する座標については考慮していません。

Dim Font1 As New Font("MS ゴシック", 16)
Dim Brush1 As New SolidBrush(Color.Black)
Dim Point1 As New PointF(0, 0)

e.Graphics.DrawString(strMOJI, Font1, Brush1, Point1)
'↑eの下に波線が表示されてしまう。

End Function

pascal
常連さん
会議室デビュー日: 2004/04/29
投稿数: 29
お住まい・勤務地: 神奈川県
投稿日時: 2004-05-09 19:19
Pascalです.
今、お困りの点というのは、「動くためのコードの書き方」が分からない、
ということでしょうか.
掲示されているコードを見る限り、e(System.Drawing.Printing.PrintPageEventArgs)
がstrPrintOut_Functionから参照出来ないのは、当然の帰結であると思います.
グローバル変数にeを設定するとか、strPrintOut_Functionにeを渡す
ということが必要ですよね.
これは、VB.NETというより、通常のプログラミング言語でも同じことだ思います.

ただ、質問の趣旨が別のところにあるようにも思えます.
問題の本質が分かりにくいので、何が問題であるのか、明確に定義されると
良いかと思います.

_________________
のんごん
会議室デビュー日: 2004/05/08
投稿数: 2
投稿日時: 2004-05-10 00:03
Pascal殿
分かりにくい質問をして申し訳ございませんでした。
お時間割いて回答していただいて、ありがとうございます。
私が分からなかった点は、「どうすればeの値を、外部の関数に渡せるのか?(スコープの問題をどう解決すればよいか)」です。

そして、おかげさまで疑問が解決いたしました。
「グローバル変数にeを設定する」という回答が、ヒントになりました。

なにを勘違いしていたかというと・・
プログラム中で、eは、System.Drawing.Printing.PrintPageEventArgsと定義されていますが、
これはVB6.0をかじった程度の私には全く聞き慣れない(ちょっと特殊な響きの)定義であり、
よく見かける変数(Integer型やString型)とは、扱い方が違うのだろう・・と思ったのがキッカケでした。

1

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