重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C#で画像ファイルをドラッグアンドドロップで描画させるプログラムを作りたいのですが、うまくできません。
ドラッグしたファイル名を読み取る部分までは動作確認できています。このファイル名の画像ファイルをForm1に描画させる部分でエラーになってしまいます。
どのように修正したらよいのかわからないのでお助けください。
-----
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Drag
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
      e.Effect = DragDropEffects.All;
    }

    private void Form1_DragDrop(object sender, DragEventArgs e)
    {
      Graphics g = e.Graphics;   // <------ エラーになる。

      if (e.Data.GetDataPresent(DataFormats.FileDrop))
      {
        foreach (string fileName
            in (string[])e.Data.GetData(DataFormats.FileDrop))
        {
          g.DrawImage(new Bitmap(fileName, new PointF(10F, 50F)));
          // Console.WriteLine(fileName); // 動作確認
        }
      }
    }
  }
}

A 回答 (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++;
      }
    }
  }
}

といった具合で ・・・
    • good
    • 0

DragDropでファイルからイメージを読み込んだら


再描画のためにInvalidate()を呼んでやればいいでしょう
    • good
    • 0
この回答へのお礼

おかげさまで、希望する描画ができました。
redfox63さん、今回も応答ありがとうございました。

お礼日時:2008/12/09 21:19

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++;
      }
    }
  }
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
教示いただいたリストではエラーが出ましたので、
一方の、Image tmp = null; を削除し、
img = new Bitmap(fileName);をtmp = new Bitmap(fileName);
に修正しましたら、描画しました!!
でも、そのままでは描画せず、別のウインドの影に一旦隠して再度表示すると描画されました。Form1_Paintをどこかで強制的に呼び出さないとだめということでしょうか?

お礼日時:2008/12/09 18:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!