Kéo thả được ẩn trên điều khiển PictureBox. Không chắc chắn tại sao, nó hoạt động tốt. Các hướng dẫn có thể xảy ra ở đây là nó sẽ không được rõ ràng cho người dùng rằng bạn có thể thả một hình ảnh trên điều khiển. Bạn sẽ phải làm một cái gì đó về điều đó, ít nhất thiết lập các tài sản BackColor với một giá trị không mặc định để người dùng có thể nhìn thấy nó.
Anyhoo, bạn sẽ cần phải thực hiện các sự kiện MouseDown trên picturebox đầu tiên để bạn có thể nhấp vào nó và bắt đầu kéo:
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;
}
}
tôi cho rằng bạn muốn di chuyển hình ảnh, tinh chỉnh nếu cần thiết nếu sao chép là dự định. Sau đó, bạn sẽ phải triển khai các sự kiện DragEnter và DragDrop trên picturebox thứ hai. Vì các thuộc tính bị ẩn, bạn nên đặt chúng trong hàm tạo của biểu mẫu. Như thế này:
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;
}
Điều này cho phép bạn kéo hình ảnh từ ứng dụng khác vào hộp. Hãy gọi nó là một tính năng. Sử dụng cờ bool nếu bạn muốn không cho phép điều này.
Nguồn
2013-04-14 23:35:11
Có thể trùng lặp: http://stackoverflow.com/questions/1935925/drag-drop-of-a-dynamically-created-shortcut?rq=1 –