• 締切済み

C# PictureBoxで使用した元画像を削除できない

現在PictureBoxに表示させた画像を、PictureBoxを定義しているFormを閉じた瞬間削除しようと考えています。 例) メインFormからPictureBoxを定義しているSubFormを表示します。 PictureBoxに、ローカルマシンにある任意のファイルをImageとして表示させます。 pictureBox1.Image = Image.FromFile(@"C:xxx.jpg"); このFormを閉じた後、PictureBoxで表示していたファイルを削除したいのですが、「他のユーザが使用しているため、削除できません」というエラーが発生して削除が実行できません。 ガベージが実行されていないからか?と考え、Formを閉じるときに以下の処理を行いました。 pictureBox1.Image = null; pictureBox1.Dispose(); それでも結果は変わりませんでした。 メインFormからサブFormとして行った場合のみ、本現象が発生します。 メインFormが閉じられれば、その直後からファイル削除を実行できます。 どうか、よろしくお願いいたします。

みんなの回答

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1
hide3_4649
質問者

お礼

参考になりました。 ありがとうございます。

関連するQ&A

  • pictureboxの画像を削除するには?

    Visual C# 2008を使用しています。 ボタンを押すとpictureboxに画像が表示されるプログラムを作成しました。 今度は、その表示された画像をクリックし、別のボタンを押すことでその画像が削除できるようにしたいと思っているのですが、うまくプログラムできません。 誰か教えていただけないでしょうか? ソースコードは以下のようになっています。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace algorithm { public partial class Form1 : Form { int space = 10; public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void kihonsyori_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\基本処理箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 50; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void groupBox1_Enter(object sender, EventArgs e) { } private void pictureBox1_Click(object sender, EventArgs e) { } private void hanpuku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\反復箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sentaku_Click(object sender, EventArgs e) { if (this.pictureBox1.Image == null) { Bitmap img = new Bitmap(@"C:\Documents and Settings\admin\My Documents\Visual Studio 2008\Projects\algorithm\algorithm\picture\選択箱.png"); Graphics g = pictureBox1.CreateGraphics(); g.DrawImage(img, 0, space, 0.4F * img.Width, 0.3F * img.Height); space += 80; img.Dispose(); g.Dispose(); } else { this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = null; } } private void sakujyo_Click(object sender, EventArgs e) { pictureBox1.Image = null; space = 0; } } }

  • 一度PictureBoxに表示させたファイルを削除したい(VB2005)

    VB2005の質問です。 一度PictureBoxに表示させたファイルを削除したいと考えています。 例 --------------------------------------------------------   Private FileName As String = "C:\パス"      'パス名   '画像の表示   Sub foo()     PictureBox1.Image = Image.FromFile(FileName)   End Sub   'ファイルの削除   Sub bar()     PictureBox1.Image = Nothing     System.IO.File.Delete(FileName)    'a)エラー発生。削除できない   End Sub -------------------------------------------------------- 上記のコードですと(a)の箇所でエラーが発生します。エラー内容は、「別のプロセスで使用されているためファイルにアクセスできません」、というものです。 このファイルを削除するには、どのような処理が必要でしょうか。 以上、どうぞよろしくお願い致します。

  • vb2003.netでpicturebox に画像を表示させるにはどう

    vb2003.netでpicturebox に画像を表示させるにはどう vb2003.netでpicturebox に画像を表示させるにはどうするのですか。 picturebox に画像を表示させるにはどうするのですか。 momo1.jpgの画像を一度変数gaに記録してからpictureboxに表示させようとしました。 うまくいきません。どこが間違っているのでしょうか。pictureboxのプロパティーもいろいろ変更しましたが結局はだめでした。 Module Module1    Public ga As String End Module Public Class Form1 Inherits System.Windows.Forms.Form     ga = "momo1.jpg"     PictureBox1.Image = System.Drawing.Image.FromFile("c:\vbnet\cai\ga") End Sub End Class 投稿日時 - 2010-09-17 20:40:44

  • C#のPictureBoxのImageについて

    Formに2つのピクチャーボックスを張り付けて、片方のピクチャーボックスに表示しているImageの特定の領域をもう片方にコピーして、それをファイルに保存しようとしたらエラーが出てしまいました。 コピーしているプログラムはこんな感じです。 Graphics g = pictureboxDst.CreateGraphics(); g.DrawImage(picbureboxSrc.Image, pictureboxDst.ClientRectangle, srcRect, GraphicsUnit.Pixel); と、単純にDrawImageでSrcからDstにコピーしているだけです。 で、pictureboxDst.Image.Save()を実行すると、Imageがnullですと怒られます。 Graphicsは、pictureboxと結びついているだけだというのはわかったのですが、DrawImageでコピーした先というのは、pictureboxDstのImageではないのでしょうか? たぶん、私の考え方がおかしいのだと思いますが、どう考えればいいのか教えてください。

  • pictureboxに表示した画像のファイル名を取得したい。

    PictureBox1.image=image.fromfile("c:\a.jpg") のように画像を表示したピクチャーボックスの ファイル名c:\a.jpgを取得するには どのように書いたら良いでしょうか。 VB.NETでございます。m(__)m

  • C#「オブジェクト参照が必要です」(初心者)

    Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。 Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。 ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の Form1.pictureBox1.image = Image.FromFile("motion1.png"); ”Form1.pictureBox1”に当てられています。 何が原因と考えられるでしょうか。 もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。 よろしくお願いします。

  • 図の削除直後の再描画

    VB2008 Express Edditionを使って、写真画像に直線等の図形を重ねる プログラムを作っています。 PictureBoxのBackgroundImageに写真画像を設定し、 Dim gp As Graphics = PictureBox1.CreateGraphics() gp.DrawLine(Pens.Pink, 100, 100, 300, 300) gp.Dispose() といった書式で図形が描画できること、それを削除するには If Not (PictureBox1.Image Is Nothing) Then PictureBox1.Image.Dispose() End If PictureBox1.Image = Nothing とすれば良いことは分かりました。 次に、例えば(100,100)-(300,300)の直線を(100,100)-(300,290)に 変更するような修正をしたいのですが、上記の図形削除と描画を 組み合わせれば良いと考えてやってみたのですが、一瞬図形が 表示されてすぐに消えてしまいます。 図形削除と再描画を別々のボタンに割り当てるとうまくいくのですが、 1つのボタンに割り当てて続けて行うとダメなようです。 これを回避するにはどうすればいいでしょうか?

  • comboBoxのファイル取得とPictureBoxで画像表示

    質問です。 ローカル(例:C:\Program Files\Test\1.jpg)等の中身(1.jpg)を、 取得してその取得した物をComboBoxの中で表示 そして表示されたComboBoxをクリックして取得した1.jpgを クリックするとPictureBoxに表示する。 "1.jpg","2.jpg","3.jpg"が複数有る場合は、 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click '上記でもいいが下記の方法が MSDN でも紹介されています。 '最初にイメージによって使用されているメモリを解放してから、グラフィックを消去します With PictureBox1 If Not (.Image Is Nothing) Then .Image.Dispose() .Image = Nothing End If End With End Sub と明記してPictureBoxの中身を消して ComboBoxで取得された2.jpgを読込む この様なソースコードを書きたいのですが、 ComboBoxにどの様に書けば良いのか困ってます。 どうか教えて下さい。 Form1で作る予定です。

  • visual C++でのツール番号の指定方法

    Visual C++では、pictureBoxやtextBoxなどのツールがありますが、例えば、以下のようにpictureBoxの番号にあったファイルを表示する場合にはどのように書き込めばいいでしょうか? pictureBox1→1.bmpを開く pictureBox2→2.bmpを開く ・・・ pictureBoxn→n.bmpを開く nの数が少なければ、 pictureBox1->Image=Image::FromFile("C:/Users/1.bmp"); のように書いていけばいいですが、nの数が多くなれば、その分書き込まなければならないですし、 この番号をプログラム内でfor文などで指定できるようにするにはどのように書き込めばいいでしょうか?

  • vb2010で2つのフォームを同時制御

    vb2010でプロジェクトを作成しています。 Form1がメインで、Form2を観客用に用意しています。 Form1のButton1をクリックすると、Form2のPictureBox1に画像を表示させたく、 下のようなプログラムを書いたのですが、Form2に画像が表示されないばかりか、 「オブジェクト参照がオブジェクトインスタンスに設定されていません。」というエラーまではかれてしまいます。このエラーの意味もわからないほど、素人なのでわかる方どうかよろしくお願いします。 ------------------------------------------------------------------------------ Private Sub Form1_Load Dim g As New Form2 g.Show() ------------------------------------------------------------------------------ Private Sub Button1_Click Form2.PictureBox1.Image = Image.FromFile("C/xxxxxxx.png") Form2.Refresh() ------------------------------------------------------------------------------

専門家に質問してみよう