ドラッグ & ドロップを処理する
テキスト、ビットマップイメージ、ファイルといった通常のオブジェクトは、以下のような処理でドラッグ & ドロップを処理できます。
srcPictureBox と dstPictureBox の2つのPictureBoxがあり、srcPictureBoxからdstPictureBoxへドラッグ & ドロップする例です。
srcPictureBoxにはMouseMoveイベントハンドラ、dstPictureBoxにはDragEnter, DragDropイベントハンドラを実装しています。
また、dstPictureBoxのAllowDropプロパティをtrueにセットしています。
srcPictureBoxには、ビットマップイメージが既にセットされていることを前提にしています。
※ EMF/WMF形式のイメージの場合は、ここの例ではうまくいきません。こちらを参照してください。
public DragAndDropTestForm()
{
InitializeComponent();
dstPictureBox.AllowDrop = true; // Drag & Dropを許可する
}
// ドラッグ元: ドラッグを開始する
private void srcPictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DataObject dataObj = new DataObject(srcPictureBox.Image);
((PictureBox)sender).DoDragDrop(dataObj, DragDropEffects.Copy);
}
}
// ドラッグ先: 受け入れ可であることを示す
private void dstPictureBox_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap)) e.Effect = DragDropEffects.Copy;
else e.Effect = DragDropEffects.None;
}
// ドラッグ先: ドロップを受け入れる
private void dstPictureBox_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
dstPictureBox.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
}
}