2012-03-06 10 views
2

WebBrowserコントロールを使用してローカルハードドライブの.jpgファイルを表示している.Net 4(VS 2010)WinFormsアプリケーションがあります。ファイルを開くには:jpgファイルを閉じるWebBrowserコントロールを取得するには?

this.webBrowser1.Navigate("c:\Folder1\myfile.jpg"); 

次に、ユーザーがクリックしてファイルを表示した後、別のフォルダに移動するためのボタンがあります。

File.Move("c:\Folder1\myfile.jpg","c:\Folder2\myfile.jpg"); 

WebBrowserコントロールにまだファイルが開いているため、IOExceptionがスローされます。

Navigate( "about:blank")を呼び出そうとしましたが、WebBrowserコントロールを破棄しようとしましたが、何も動作しません。 jpgファイルを閉じるWebBrowserコントロールを取得するには、どのような方法が良いですか?

他の解決策が見つからない場合は、jpgを一時フォルダにコピーして表示に使用する必要があるため、必要に応じて元の場所に移動できます。

+0

私はテストプロジェクトを作成し、あなたが言ったとおりに正確に行いました。他に何かありますか? – ionden

+0

私の生産コードでは、マップされたネットワークドライブからファイルをロードしているとき(同じドライブ上の別のフォルダに移動している)というわずかな違いがあります。私はそれが行動の違いを引き起こすとは思わないでしょう。 –

答えて

1

あなたがWebブラウザコントロールに関連付けられていないなら、あなたは代わりのPictureBox使用することができます

ドロップフォームと名前のピクチャボックスをそれPictureView

PictureView.Image = Bitmap.FromFile("path to the image") 

Webブラウザコントロールを使用する必要がある場合は、イメージのコピーを一時的な場所に作成し、ブラウザで一時コピーを参照することを検討することがあります。

+1

WebBrowserコントロールに縛られています。私はpdfファイルを見るためにも使いたいです(Webブラウザー内でAdobe Readerを正しく読み込むことができます)。 –

+0

それから、theresの一時的な場所の取引。一時的な場所があなたのために働かないなら、それに対処する他の方法があります。 –

2

OK、私のコードの別のセクションにバグが見つかりました。私は、WebBrowserコントロールのNavigatedイベントとResizeイベントを呼び出して、イメージをコントロールの幅に合わせるようにコントロールをズームするこのメソッドを持っています。

private void SetBrowserZoom() 
    { 
     if (CurrentSelectedFilePath.ToLower().EndsWith(".jpg")) 
     { 
      var bitMap = new System.Drawing.Bitmap(CurrentSelectedFilePath); 
      decimal imageWidth = bitMap.Width; 
      decimal browserWidth = WebBrowser.Width - 40; 
      decimal zoomFactor = decimal.Round((browserWidth/imageWidth) * 100, 0); 
      WebBrowser.Document.Images[0].Style = "zoom: " + zoomFactor.ToString() + "%"; 
      bitMap.Dispose(); 
     } 
    } 

ビットマップでDispose()を呼び出さず、ファイルを開いたままにしていました。 bitMap.Dispose()への呼び出しを追加した後、問題は解決しました。

私を助けてくれる人に感謝します。