- PR -

VB.NETでのPrintDocumentのデバイスコンテキストの取得方法

1
投稿者投稿内容
まーぶる
会議室デビュー日: 2006/02/23
投稿数: 4
投稿日時: 2006-02-23 19:58
はじめて投稿させていただきます。

現在VB.NETで開発を行なっております。
PrintDocumentのデバイスコンテキストの取得方法がわからず困っております。
(あるツールのメソッドの引数として必要な為、取得したい)

VB6の頃はPrinterオブジェクトのhDCプロパティにて取得できたようですが、
ヘルプを見ると
「この項目は必要なくなりました。
PrintDocument コンポーネントのインスタンスが、
デバイス コンテキストに相当します。」
と書かれておりました。

取得方法がわかる方がいらっしゃいましたら、よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-23 20:49
引用:

まーぶるさんの書き込み (2006-02-23 19:58) より:

取得方法がわかる方がいらっしゃいましたら、よろしくお願いします。


GetHdc メソッドを使いなさいということなのではないでしょうか?

  Graphics.GetHdc メソッド

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まーぶる
会議室デビュー日: 2006/02/23
投稿数: 4
投稿日時: 2006-02-23 22:39
じゃんぬねっとさん、ありがとうございます。

まだまだVB.NETの経験が浅く、もう1つお聞きしてもよろしいでしょうか?

PrintDocumentは使わないで、かわりにGraphics.GetHdc メソッド
を使いなさいと事なのでしょうか?

YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2006-02-23 23:15
横から失礼します。
PrintDocument.PrintPageイベントで処理するとしたら引数 e as PrintPageEventArgsの
e.Graphicsから取得できるという意味では?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-24 01:49
引用:

YASさんの書き込み (2006-02-23 23:15) より:

PrintDocument.PrintPageイベントで処理するとしたら引数 e as PrintPageEventArgsの
e.Graphicsから取得できるという意味では?


仰るとおりです。

PrintDocument の場合はイベントで Document を完成させますからね。
個人的にこれはわかりにくいと思ってます。(イベント名を考えると)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まーぶる
会議室デビュー日: 2006/02/23
投稿数: 4
投稿日時: 2006-02-24 09:45
YASさん、じゃんぬねっとさん、
お忙しい中、ありがとうございます。

教えていただいたように
PrintDocument.PrintPageイベントで取得するようにしてみたのですが、
イベント内で処理が行なわれ、その後、
PrintDocument1.Print()の箇所で、下記のエラーになってしまいます。

-----------------------------------------------------------
'System.InvalidOperationException'のハンドルされていない例外が
system.drawing.dllで発生しました。

追加情報:このオブジェクトは現在ほかの場所で使用されています。
-----------------------------------------------------------


ソースコード:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'印刷を開始する
PrintDocument1.Print()

End Sub

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

Dim hdc As Integer

hdc = e.Graphics.GetHdc.ToInt32

'次のページがないことを通知する
e.HasMorePages = False

End Sub



どうも、
hdc = e.Graphics.GetHdc.ToInt32
この1行があるとこのエラーが発生してしまいます。

間違いや、足りない処理などありますでしょうか?
何度も恐縮ですが、よろしくお願い致します。

YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2006-02-24 15:20
デバイスコンテキストハンドルを取得した後は解放しなければいけないはずです。
もしかすると解放をしていないからなのでは?

Graphics.ReleaseHdc()

まーぶる
会議室デビュー日: 2006/02/23
投稿数: 4
投稿日時: 2006-02-24 19:54

YASさん 
お忙しい中、ありがとうございました。

御指摘の通り、デバイスコンテキストハンドルを解放していない為でした。

じゃんぬねっとさん、YASさんに教えていただき、
無事に取得する事ができ、且つ目的の処理を実現させる事が出来そうです。
本当にありがとうございました。
1

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