はじめに
今回は、C#でPictureBoxにドラッグ・アンド・ドロップで画像を表示する実装をしてみました。

Visual Studioのセットアップや、プロジェクトの新規作成は以下の記事を参考にしてください。
他にも私のブログで、C#について解説している記事がありますのでご覧ください。
実装
PictureBox配置
まずは、フォームにPictureBoxを配置します。

ドラッグする領域を分かりやすくする為に、枠線を表示します。
PictureBoxのBorderStyleにFixedSingleを指定します。

PictureBoxの画像の表示の仕方については、画像の縦横比は変更せず、枠内にピッタリ表示するようにします。
PictureBoxのSizeModeにZoomを指定します。

フォームには、枠線がついたPictureBoxが配置されました。

PictureBox ドラッグイベント
コンストラクタに処理を追加します。
PictureBoxにドラッグ・アンド・ドロップを許可します。
public Form1()
{
InitializeComponent();
// ドロップを許可
pictureBox1.AllowDrop = true;
}
PictureBoxのDragDropイベントと、DragEnterイベントを実装します。

PictureBoxにドラッグされたイベントを実装します。
ここでは、ドラッグされた際に、マウスカーソルの形を変更しています。
/// <summary>
/// PictureBox ドラッグイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
}
PictureBoxに写真ファイルをドラッグしてみましょう。
マウスカーソルに変わるのが確認できます。

PictureBoxの領域外の場合は、ドラッグできないアイコンになります。

PictureBox ドロップイベント
画像をドロップされたイベントを実装します。
実際に、複数のファイルをドロップすることができますが、今回はPictureBoxに表示したいので、1個目の画像を表示するようにしました。
/// <summary>
/// PictureBox ドロップイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
// ドラッグされたファイルのパスを取得
string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop);
// 複数の場合、1個目の画像を表示
pictureBox1.ImageLocation = fileName[0];
}
動作確認
それではアプリケーションを実行してみましょう。
PictureBoxに写真をドラッグ・アンド・ドロップします。

画像が表示されました。
画像の縦横比は変わらずに、枠内に収まるように表示されます。
画像をドラッグ・アンド・ドロップする度に、きちんと画像が表示されます。

ちなみに、画像以外のファイルをドラッグ・アンド・ドロップすると、以下のような表示になります。

さいごに
今回は、PictureBoxにドラッグ・アンド・ドロップで画像を表示する実装をしてみました。
お疲れさまでした。
他にも私のブログで、C#について解説している記事がありますのでご覧ください。
コメント