- ベストアンサー
C#での画像ファイルをドラッグアンドドロップで描画
- C#で画像ファイルをドラッグアンドドロップで描画させるプログラムを作りたいが、エラーが発生してしまう。
- ファイル名の画像ファイルをForm1に描画させる部分でエラーになってしまい、修正方法が分からない。
- 質問者はC#でドラッグアンドドロップで画像ファイルを描画させるプログラムを作りたいが、問題が発生している。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DragEventArgsには Graphicsがありません やるとすれば Image型または Bitmap型の変数をフォームに準備しておいて これにファイルから読み込んでおいて Paintイベントで描画しましょう public partial class Form1 : Form { Image[] img; private void Form1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { int n = 0; Image tmp = null; foreach (string fileName in (string[])e.Data.GetData(DataFormats.FileDrop)) { Image tmp = null; try { img = new Bitmap( fileName ); Array.Resize( ref img, n + 1 ); img[n] = new Bitmap( fileName ); n++; } catch(Exception) { } } } } private void Form1_Paint(object sender, PaintArgs e ) { if ( img != null ) { int x = 0; for( int n = 0; n < img.length; n++ ) { e.Graphics.DrawImage( img[n], x, 0 ); x += img[n].Length; n++; } } } } といった具合で ・・・
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
DragDropでファイルからイメージを読み込んだら 再描画のためにInvalidate()を呼んでやればいいでしょう
- redfox63
- ベストアンサー率71% (1325/1856)
Paintイベントを一部修正 m(__)m n++; が不要でした private void Form1_Paint(object sender, PaintArgs e ) { if ( img != null ) { int x = 0; for( int n = 0; n < img.length; n++ ) { e.Graphics.DrawImage( img[n], x, 0 ); x += img[n].Length; // これは不要でした ・・・ // n++; } } }
お礼
早速の回答ありがとうございました。 教示いただいたリストではエラーが出ましたので、 一方の、Image tmp = null; を削除し、 img = new Bitmap(fileName);をtmp = new Bitmap(fileName); に修正しましたら、描画しました!! でも、そのままでは描画せず、別のウインドの影に一旦隠して再度表示すると描画されました。Form1_Paintをどこかで強制的に呼び出さないとだめということでしょうか?
お礼
おかげさまで、希望する描画ができました。 redfox63さん、今回も応答ありがとうございました。