2013-04-14 39 views
6

Tôi đang làm việc trong studio hình ảnh 2012 với C# và tôi cần kéo hộp Hình ảnh vào một hộp hình khác, về cơ bản thay thế mục tiêu Picturebox hình ảnh bằng hình ảnh hộp Ảnh Kéo.C# Kéo và thả từ một hộp Hình ảnh vào

Làm cách nào để thực hiện việc này?

Hãy cụ thể và cố gắng giải thích đơn giản nhất và tốt nhất có thể. Tôi cực kỳ mới để lập trình, và một chút tuyệt vọng vì vậy hãy kiên nhẫn với tôi.

+0

Có thể trùng lặp: http://stackoverflow.com/questions/1935925/drag-drop-of-a-dynamically-created-shortcut?rq=1 –

Trả lời

1

Bạn có thể sử dụng chuột và để lại sự kiện để thực hiện việc này một cách dễ dàng ... Ví dụ: bạn có hai hộp hình ảnh pictureBox1 và pictureBox2 ... Và bạn muốn kéo hình ảnh từ hộp hình ảnh1 và thả nó vào hộp ảnh2 này ...

private void pictureBox2_MouseUp(object sender, MouseEventArgs e) 
    { 
     if (a == 1) 
     { 
      pictureBox1.Image = pictureBox2.Image; 
      a = 0; 
     } 
    } 

    private void pictureBox1_MouseEnter(object sender, EventArgs e) 
    { 
     a = 1; 
    } 

trong đó 'a' chỉ là khóa hoặc chìa khóa để kiểm tra xem con chuột đã nhập điều khiển mà chúng tôi muốn thả hình ảnh này ... hy vọng nó đã giúp ... làm việc cho tôi

10

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.

+0

nếu (img == null) trả về; sự trở lại trong dòng này làm gì? Xin lỗi, đó chỉ là thực tế là lập trình lần đầu tiên của tôi – user2250165

+0

Nó dừng mã bị rơi khi người dùng nhấp vào một hộp hình ảnh không có hình ảnh. –

+0

ok ok cảm ơn bạn rất nhiều Tôi có thêm một vài câu hỏi. InitializeComponent(); - Điều gì làm điều đó làm và cũng tại sao bạn sử dụng dấu + = thay vì chỉ dấu =? – user2250165

Các vấn đề liên quan