DOBON.NET DOBON.NETプログラミング掲示板過去ログ

異なったコントロール間で画像をドラッグ&ドロップしてコピーを行うには

  • 題名: 異なったコントロール間で画像をドラッグ&ドロップしてコピーを行うには
  • 著者: りす
  • 日時: 2006/07/25 18:17:20
  • ID: 16830_2
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[XP,C#]
分類:[.NET]

いつも参考にさせていただいてます。

下記サイトを
http://dobon.net/vb/dotnet/control/draganddrop.html
参考にしてドラッグ&ドロップのプログラムを行いました。

・目標
フォームに2つのパネルを貼り、パネル1上にはピクチャボックスが貼ってある。
パネル1上にあるピクチャボックスをD&Dすることでパネル2にコピーをしたい。

・現状
パネル1上にあるピクチャボックスをD&Dしたらパネル2にピクチャボックスが表示されたが、
パネル1上には何もなくなってしまった。(つまりムーブ状態)

・質問
D&Dした結果両方ともピクチャボックスが表示されるようにするにはどのようにすればよいのでしょうか?
以下に、それぞれのイベントハンドラのソースを記します。
アドバイスよろしくお願いいたします。

private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//マウスの左ボタンだけが押されている時のみドラッグできるようにする
if (e.Button == MouseButtons.Left)
{
//ドラッグの準備
PictureBox pic = (PictureBox) sender;
//マウスの押された位置を記憶
mouseDownPoint = new Point(e.X, e.Y);
}
else
mouseDownPoint = Point.Empty;
}

private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouseDownPoint = Point.Empty;
}

private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (mouseDownPoint != Point.Empty)
{
//ドラッグとしないマウスの移動範囲を取得する
Rectangle moveRect = new Rectangle(
mouseDownPoint.X - SystemInformation.DragSize.Width / 2,
mouseDownPoint.Y - SystemInformation.DragSize.Height / 2,
SystemInformation.DragSize.Width,
SystemInformation.DragSize.Height);
//ドラッグとする移動範囲を超えたか調べる
if (!moveRect.Contains(e.X, e.Y))
{
//ドラッグの準備
PictureBox pic = (PictureBox) sender;

//ドラッグ&ドロップ処理を開始する
DragDropEffects dde =
pic.DoDragDrop(this.pictureBox1,
DragDropEffects.Copy);

mouseDownPoint = Point.Empty;
}
}
}

private void panel2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
//ドロップされたデータがPictureBox型か調べる
if (e.Data.GetDataPresent(typeof(PictureBox)))
{
PictureBox pic = (PictureBox)e.Data.GetData(typeof(PictureBox));
//ドロップされたデータをリストボックスに追加する
this.panel2.Controls.Add(pic);
}
}

private void panel2_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
//ドラッグされているデータがPictureBox型か調べる
if (e.Data.GetDataPresent(typeof(PictureBox)))
{
e.Effect = DragDropEffects.Copy;
}
else
//PictureBox型でなければ受け入れない
e.Effect = DragDropEffects.None;
}


見にくくなってすみません

DOBON.NET | プログラミング道 | プログラミング掲示板