• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[C#]ドラッグアンドドロップ)

[C#]ドラッグアンドドロップ

このQ&Aのポイント
  • [C#]ドラッグアンドドロップについての質問です。サンプルプログラムのImageDropにおいて、うまく動作しないエラーが発生しています。
  • エラーメッセージによると、リモート処理プロキシにチャネルシンクがないためエラーが発生しているようです。
  • 画像をドラッグアンドドロップさせて動作確認をする際にエラーが起きており、DrawImage(...)メソッドの内部でRealProxy()メソッドが呼ばれていることが原因の一つのようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

cs2003/2005双方ともにこの現象は起きるようですね 別な方法として DataObjectを使ってファイル名とイメージを送る方法ならうまくいくようですよ ファイルをドロップされた際に BMPやJPGなどで保存して置きます その保存されたイメージをつかってDoDragDropを行います // TempImage.jpgで保存されている仮定 string[] ss = { "TempImage.jpg" }; FileInfo oFInfo = new FileInfo( ss[0] ); ss[0] = oFInfo.FullName; DataObject dObject = new DataObject( DataFormats.FileDrop, ss ); dObject.SetData( DataFormats.Bitmap, (Bitmap)Image.FromFile( ss[0] ); DragDropEffects dde = DoDragDrop( dObject, DragDropEffects.All ); といった具合です …

ape5
質問者

お礼

おかげさまで、動かすことができました。 以下のように書き換えましたら動作しました。 なお、スマートではないやり方が入ってますが、参考にされる方は気を付けてください。 namespace Chapter14 { class ImageDrop : ImageClip { ・ ・ ・ protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); if (image != null) { bIsTarget = false; string[] strTempFile = { Directory.GetCurrentDirectory() + "\\TempImage.jpg" }; int num = 0; while (File.Exists(strTempFile[0])) { strTempFile[0] += num.ToString(); } image.Save(strTempFile[0]); DataObject data = new DataObject(); data.SetData(DataFormats.FileDrop, strTempFile); data.SetData(DataFormats.Bitmap, (Bitmap)Image.FromFile(strTempFile[0])); DragDropEffects dde = DoDragDrop(data, DragDropEffects.Copy | DragDropEffects.Move); //DragDropEffects dde = DoDragDrop(image, DragDropEffects.Copy | DragDropEffects.Move); if (dde == DragDropEffects.Move && !bIsTarget) { image = null; this.Invalidate(); } } } }

ape5
質問者

補足

回答ありがとうございます。 そうですか、C#2003でも同じ現象がおきるのですか・・・ そして、代替案まで出していただき誠にありがとうございます。 実際に書き換えてやってみます。そのあと改めてお礼を書きたいと思います。