2016-10-03 21 views
0

私はWindowsフォームアプリケーションに2つのピクチャボックスを持っています。これらのピクチャボックスはそれぞれイメージを保持します。 pictureBox1は小さく、122×52しかなく、pictureBox2ははるかに大きい(459×566)。私がしたいことは、picturebox1の画像をpicturebox2にドラッグアンドドロップして新しい画像を作成して保存できることです。 Wheelyver x & y座標私はpictureBox1の画像を置くと、pictureBox2のその位置で右に "スタンプ"します。そして、pictureBox2の画像は変更され、保存されます。ドラッグアンドドロップするだけで、ユーザーは画像をpictureBox2に簡単に「スタンプ」できるはずです。これは可能ですか?C#の別の画像ボックスにある画像ボックスの画像ボックスにある画像をドラッグアンドドロップする方法は?

+0

ピクチャーボックスはコントロールです。そこに含まれる画像は何か他のものです。最初の画像に2番目の画像を描画する必要があります。 – Plutonix

+0

それは問題ありませんが、画像をドロップした場所の座標を取得する方法はありますか? DragDropイベントまたはDragEnterイベントのコードビハインドで新しいイメージを作成するとしますか? – MrSnrub

答えて

0

Mr Snrub、

ドラッグドロップを使用すると、あなたは何をしたいのかを制御します。一般的に、コントロールのMouseDownイベントでは、ドラッグイベントが開始されているかどうかを判断します。私はフォームのプロパティを保持します。

private Point _mouseDownPoint; 

私のMouseDown

同じ制御用ONMOUSEMOVE場合に
protected override void OnMouseDown(MouseEventArgs e) 
    { 
     _mouseDownPoint = e.Location; 
    } 

中制御からドラッグでいることを設定します。このコードは、ユーザーがドラックドをドラッグしようとする可能性が最も高いことを保証します。このコードはユーザコントロールから来ているので、DoDragDropのこれをあなたのケースで変更する必要があるかもしれません。ドロップを受け取ることができる

protected override void OnMouseMove(MouseEventArgs e) 
    { 
     base.OnMouseMove(e); 
     if (e.Button != MouseButtons.Left) return; 
     var dx = e.X - _mouseDownPoint.X; 
     var dy = e.Y - _mouseDownPoint.Y; 
     if (Math.Abs(dx) > SystemInformation.DoubleClickSize.Width || Math.Abs(dy) > SystemInformation.DoubleClickSize.Height) 
     { 
      DoDragDrop(this, DragDropEffects.Move); 
     } 
    } 

あなたのコントロール(複数可)自分のDragEnterイベントは、コード化されている必要があります。ここでは、ToolStripButtonとカスタムUserControl DSDPicBoxを区別するDragEnterイベントがあります。 DragEnterイベントがコード化されていないコントロールは、ドラッグされたときにnoDropアイコンを表示します。

private void Control_DragEnter(object sender, DragEventArgs e) 
    { 
     var button = e.Data.GetData(typeof(ToolStripButton)) as ToolStripButton; 
     if (button != null) 
     { 
      e.Effect = DragDropEffects.Copy; 
      return; 
     } 
     var element = e.Data.GetData(typeof(DSDPicBox)) as DSDPicBox; 
     if (element == null) return; 
     e.Effect = DragDropEffects.Move; 
    } 

最後に、ドロップを処理する必要があります。 panelDropPointは、アイテムがドロップされた場所の座標です。新しいグラフィックを古いものに置き換えることができます。サイズを変更する場合は、新しい解像度で画像をレンダリングする必要があります。

private void panel_DragDrop(object sender, DragEventArgs e) 
    { 
     // Test to see where we are dropping. Sender will be control on which you dropped 
     var panelDropPoint = sender.PointToClient(new Point(e.X, e.Y)); 
     var panelItem = sender.GetChildAtPoint(panelDropPoint); 
     _insertionPoint = panelItem == null ? destination.Controls.Count : destination.Controls.GetChildIndex(panelItem, false); 

     var whodat = e.Data.GetData(typeof(ToolStripButton)) as ToolStripButton; 

     if (whodat != null) 
     { 
      //Dropping from a primitive button 
      _dropped = true; 
      whodat.PerformClick(); 
      return; 
     } 

     } 

私は水から泥をかくだけのコードからいくつかの項目を削除しました。このコードはうまく動作しないかもしれませんが、あなたを近づけるべきです。

よろしくお願いいたします。 Marc

関連する問題