2017-03-01 7 views
0

私は画像をエクスプローラから勝利フォームに移動しています。それはうまく動作します。私は画像を移動した後、私はフォルダ内でそれを削除したいが、それは動作しません。ファイルがwinformで使用されているというエラーが表示されます。ドラッグドロップ後にファイルを削除することはできません

私は試してみました:

File.Delete(files[0]) 
files = null 
img = null 
img.Dispose() 

しかし、私はまだファイルを削除または移動することはできません。

private void frmADManager_DragDrop(object sender, DragEventArgs e) 
    { 
     try 
     { 
      int x = PointToClient(new Point(e.X, e.Y)).X; 

      int y = PointToClient(new Point(e.X, e.Y)).Y; 

      if (x >= pbUser.Location.X && x <= pbUser.Location.X + pbUser.Width && y >= pbUser.Location.Y && y <= pbUser.Location.Y + pbUser.Height) 

      { 

       string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 
       Image img = Image.FromFile(files[0]); 
       if (img.Width == 648) 
       { 
        pbUser.Image = img; 
        SavePicture = true; 
        tsbtnSave.Enabled = true; 
        toolStrip1.Focus(); 
        File.Delete(files[0]); 
        files = null; 
        img = null; 
        img.Dispose();       
       } 
       else 
+0

イメージを 'pbUser'に保存する必要がある場合は、ソースのコピーを使用する必要があります。 I.E .: 'pbUser.Image =新しいビットマップ(img);'。 @wakaの答えにも従ってください。クローンはソースファイルを参照し、ファイルを削除できないように 'img.Clone()'を使わないでください。 – TnTinMn

答えて

2

img.Dispose()に電話する前に画像を削除しようとしています。 imgが破棄されるまで、まだ使用中ですので、改行してください:

if (img.Width == 648) 
{ 
    pbUser.Image = img; 
    SavePicture = true; 
    tsbtnSave.Enabled = true; 
    toolStrip1.Focus(); 
    img.Dispose();//you are disposing the img, no need to null it 
    File.Delete(files[0]); 
} 
+0

私はWakasの答えのみを使用すると、 "System.Drawing.dllで 'System.ArgumentException'型の未処理の例外が発生しました。" TnTinMnのanswareを使用すると、 "System.DirectoryServices .DirectoryServicesCOMException:制約違反が発生しました。 – TBoy3

+0

私が変更をコミットした後で、私はimg.Dispose()を移動しました。それはうまくいった。両方のおかげで、あなたの助けになりました。 – TBoy3

関連する問題