Drag & Drop ist im PictureBox-Steuerelement verborgen. Nicht sicher warum, es funktioniert gut. Die wahrscheinliche Anleitung hier ist, dass es für den Benutzer nicht offensichtlich ist, dass Sie ein Bild auf dem Steuerelement löschen können. Sie müssen etwas dagegen tun, mindestens setzen Sie die BackColor-Eigenschaft auf einen nicht-Standard-Wert, so dass der Benutzer es sehen kann.
Anyhoo, müssen Sie das Ereignis Mousedown auf der ersten picturebox implementieren, so dass Sie es klicken und beginnen Sie zu ziehen:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
var img = pictureBox1.Image;
if (img == null) return;
if (DoDragDrop(img, DragDropEffects.Move) == DragDropEffects.Move) {
pictureBox1.Image = null;
}
}
Ich nahm an der Sie das Bild bewegen wollte, zwicken notwendig, wenn, wenn das Kopieren war beabsichtigt. Dann müssen Sie die Ereignisse DragEnter und DragDrop auf der zweiten Picturebox implementieren. Da die Eigenschaften ausgeblendet sind, sollten Sie sie im Konstruktor des Formulars festlegen. Wie folgt:
public Form1() {
InitializeComponent();
pictureBox1.MouseDown += pictureBox1_MouseDown;
pictureBox2.AllowDrop = true;
pictureBox2.DragEnter += pictureBox2_DragEnter;
pictureBox2.DragDrop += pictureBox2_DragDrop;
}
void pictureBox2_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.Bitmap))
e.Effect = DragDropEffects.Move;
}
void pictureBox2_DragDrop(object sender, DragEventArgs e) {
var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
pictureBox2.Image = bmp;
}
Dies ermöglicht Ihnen, ein Bild aus einer anderen Anwendung in das Feld zu ziehen. Nennen wir es ein Feature. Verwenden Sie ein Bool-Flag, wenn Sie dies nicht zulassen möchten.
Mögliches Duplikat von: http://stackoverflow.com/questions/1935925/drag-drop-of-a-dynamically-created-shortcut?rq=1 –