DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Webbrowser disposeからの再使用

環境/言語:[WindowsXP VBS2008]
分類:[.NET]

お世話になります。
VB.NETのWebbrowserのDisposeからの再使用方法に
ついて教えてください。

コード
WB1.Dispose()
WB1.Url = New Uri(str_pdf_path)

このままだと2行目の所でエラーが発生してしまいます。
※破棄されたオブジェクトにアクセスできません。オブジェクト名(webbrowser)です。

これを回避する方法を教えて頂ければと思います。
よろしくお願いします。
そもそも何故Disposeしてるのでしょう?

Disposeしたものは、基本的にもう使用不可能であるため、他のインスタンスをNewすることになりますが。
■No30717に返信(Hongliangさんの記事)
> そもそも何故Disposeしてるのでしょう?
>
> Disposeしたものは、基本的にもう使用不可能であるため、他のインスタンス >をNewすることになりますが。

返信ありがとうございます。
実は以前投稿させていただいた質問がまだ解決しておらず困っております。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=30663&rev=&no=0

WebbrowserにPDFファイル(仮名:A)を読み込みスクロールバーを2ページ目まで進めた状態で別のPDFファイル(仮名:B)を参照した後にAを再度読み込むとスクロールバーが2ページ目の所にあります。
これをスクロールバーを一番上に戻したいのですがその方法がわからずリフレッシュなどを試してみたのですが全然効果が見られません。
なので一旦廃棄してしまえばスクロールバーの情報もリセットされるのではないかと思いこの方法を試しています。

少しわかりにくいかもしれませんがよろしくお願いします。
追記

後・・・調べてわかったことだけ報告すると、WebbrowserでPDFを読み込ませた場合にはソフトに読み込んでそれをWebbrowserに表示しているということがわかりました。

なので、Webbrowser自体のスクロールバーではなくWebbrowser内のソフトのスクロールバーを操作しないといけません。

こちらがその仕様書とパラメータになるようです。(7ページ目)
http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf

WebbrowserにPDFを読み込ませるコード
WB1.Url = New Uri(str_pdf_path & "#navpanes=0&view=FitH,top=0,0&page=1")
このようにパラメータを一緒に送ることでスクロールバーの位置などが調整できるようなのですがコードの最後「page=1」の1の部分を2に変えた場合は2ページ目から読み込まれるのですが1にしても1ページ目から読み込まれずに困っております。この辺に詳しい方いらっしゃいましたら教えて頂ければと思います。

よろしくお願いします。
■No30718に返信(トマトスパさんの記事)
> 環境/言語:[WindowsXP VBS2008]
VBScript に 2008 というバージョンはありません。
VB2008 のことでしょうか?


> WebbrowserにPDFファイル(仮名:A)を読み込みスクロールバーを
> 2ページ目まで進めた状態で別のPDFファイル(仮名:B)を参照

WebBrowser 自体には PDF を表示する機能はありません。

何かしらの追加のソフトウェア(PDF ビューワーの類)を追加インストールし、
それを用いて WebBrowser 上に表示させているかと思いますが、
どのソフトのどのバージョンをお使いですか?

・Foxit Reader
・Adobe Acrobat
・Adobe Reader
・その他

また、WebBrowser 経由では無く、閲覧ソフト自体で開かせては
いけないのでしょうか。定番の Adobe Reader の場合、
VB.NET から制御するサンプルもあった気が…(未確認)。
http://www.adobe.com/devnet/acrobat/downloads.html


とりあえず Adobe Reader X を用いたサンプルを紹介しておきます。

'C:\Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroPDF.dll
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    AxAcroPDF1.LoadFile("C:\test\sample.pdf")
    AxAcroPDF1.setShowToolbar(True)
    AxAcroPDF1.setShowScrollbars(True)
    AxAcroPDF1.setPageMode("none")        'しおり、サムネイルを表示しない
    AxAcroPDF1.setLayoutMode("oneColumn") '1コラムの連続表示モード
    AxAcroPDF1.setView("fitBH")
End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    '.setCurrentPage(1) や .gotoFirstPage() だけでも 先頭ページに移動するが、
    '既に先頭ページに居た場合、スクロール位置が先頭に戻らないので、
    'setZoomScroll や setView を併用して移動させる
    AxAcroPDF1.setZoomScroll(100.0F, 0, 0)
    AxAcroPDF1.setView("fitBH")
    AxAcroPDF1.gotoFirstPage()
End Sub


WebBrowser で表示させていた場合も、アンマネージの Document プロパティから、
AxAcroPDF や AxFoxitReaderOCX などのインスタンスが得られるのですけれどね。
 Dim o As Object = WebBrowser1.ActiveXInstance.Document
 'Dim o As Object = AxWebBrowser1.Document
魔界の仮面弁士様

ご返事ありがとうございます。

>VBScript に 2008 というバージョンはありません。
>VB2008 のことでしょうか?
VB2008のことです。大変失礼いたしました。

>どのソフトのどのバージョンをお使いですか?
Adobe Readerの9を使用しております。

>また、WebBrowser 経由では無く、閲覧ソフト自体で開かせては
>いけないのでしょうか。定番の Adobe Reader の場合、
>VB.NET から制御するサンプルもあった気が…(未確認)。
>http://www.adobe.com/devnet/acrobat/downloads.html
フォーム上で表示できるので見栄えがすごく良いため
どうしてもWebBrowser経由で実現させたいと思っております。

サンプルまで載せていただき大変助かります。
2012/07/10(Tue) 19:54:47 編集(投稿者)

■No30722に返信(トマトスパさんの記事)
> フォーム上で表示できるので見栄えがすごく良いため
せっかく Reader 7 以降をお使いなのですから、フォーム内に
表示させたいなら、やはり Form に AcroPDF コントロールを貼って、
そこに PDF を表示させた方が、見栄えが良いのではないでしょうか。

ちなみに、Reader をブラウザ内に表示させる設定になっていなかった場合、
WebBrowser で開こうとすると、別ウィンドウで Reader が起動することになります。
(この場合は AcroPDF での表示にも制限が生じますが)


> どうしてもWebBrowser経由で実現させたいと思っております。
どうしても WebBrowser が必要な場合は、先述した手法を試してみてください。
魔界の仮面弁士様

ご返事有難うございます。

>>フォーム上で表示できるので見栄えがすごく良いため
> せっかく Reader 7 以降をお使いなのですから、フォーム内に
> 表示させたいなら、やはり Form に AcroPDF コントロールを貼って、
> そこに PDF を表示させた方が、見栄えが良いのではないでしょうか。

フォーム上で表示できるということなので早速dllを入れてやってみました!
問題なくスクロールバーも一番上まで戻ってます。
ありがとうございます!感動的です!

後、ナビゲーションパネルボタンを常に非表示にしたいのですが
どうすればできるのでしょうか。

あれこれと聞いて申し訳ないのですがどうぞよろしくお願いします。

DOBON.NET | プログラミング道 | プログラミング掲示板