- - PR -
印刷をより便利に行いたい(PrintDocument内から関数を呼び出す)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 |
|
投稿日時: 2004-05-09 19:19
Pascalです.
今、お困りの点というのは、「動くためのコードの書き方」が分からない、 ということでしょうか. 掲示されているコードを見る限り、e(System.Drawing.Printing.PrintPageEventArgs) がstrPrintOut_Functionから参照出来ないのは、当然の帰結であると思います. グローバル変数にeを設定するとか、strPrintOut_Functionにeを渡す ということが必要ですよね. これは、VB.NETというより、通常のプログラミング言語でも同じことだ思います. ただ、質問の趣旨が別のところにあるようにも思えます. 問題の本質が分かりにくいので、何が問題であるのか、明確に定義されると 良いかと思います. _________________ |
|
投稿日時: 2004-05-10 00:03
Pascal殿
分かりにくい質問をして申し訳ございませんでした。 お時間割いて回答していただいて、ありがとうございます。 私が分からなかった点は、「どうすればeの値を、外部の関数に渡せるのか?(スコープの問題をどう解決すればよいか)」です。 そして、おかげさまで疑問が解決いたしました。 「グローバル変数にeを設定する」という回答が、ヒントになりました。 なにを勘違いしていたかというと・・ プログラム中で、eは、System.Drawing.Printing.PrintPageEventArgsと定義されていますが、 これはVB6.0をかじった程度の私には全く聞き慣れない(ちょっと特殊な響きの)定義であり、 よく見かける変数(Integer型やString型)とは、扱い方が違うのだろう・・と思ったのがキッカケでした。 |
1