2011-09-26 30 views
7

Làm cách nào để biết khi nào hình ảnh của hình tượng thay đổi?
Có sự kiện thay đổi hình ảnh không?Có sự kiện thay đổi hình ảnh cho một PictureBox Control không?

+3

Tôi không nghĩ rằng có một sự kiện như vậy vì đây là bạn của những người sẽ được thay đổi/thiết lập hình ảnh. – Waqas

+1

@Waqas nếu có trường hợp bạn đang xây dựng Thư viện kiểm soát người dùng và thay đổi hình ảnh có thể quan trọng hơn bạn có thể cần sự kiện thay đổi hình ảnh. Nhưng một lần nữa bạn có thể thừa kế PictureBox và sửa PictureBox.Image Get/Set Method nơi bạn có thể kích hoạt Sự kiện tùy chỉnh hoặc gọi một phương thức! – Burimi

Trả lời

8

Trước tiên hãy đảm bảo rằng hình ảnh được tải không đồng bộ. Để làm điều này, hãy đặt WaitOnLoad property của PictureBox thành false (giá trị mặc định).

pictureBox1.WaitOnLoad = false; 

Sau đó, tải hình ảnh không đồng bộ:

pictureBox1.LoadAsync("neutrinos.gif"); 

Tạo một event handler cho sự kiện LoadCompleted của PictureBox. Sự kiện này được kích hoạt khi hoạt động tải hình ảnh không đồng bộ được hoàn thành, hủy hoặc gây ra ngoại lệ.

pictureBox1.LoadCompleted += PictureBox1_LoadCompleted; 

private void PictureBox1_LoadCompleted(Object sender, AsyncCompletedEventArgs e) 
{  
    //...  
} 

Bạn có thể tìm thêm thông tin về sự kiện này trên MSDN:

http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.loadcompleted.aspx

3

Có những sự kiện tải nếu bạn sử dụng Load() hoặc LoadAsync(), nhưng không phải cho Image tài sản. Điều này được bạn thiết lập rõ ràng (nhà phát triển) và thường nói bằng 100% quyền kiểm soát của bạn (xem chú thích bên dưới). Nếu bạn thực sự muốn mặc dù (không thực sự là một điểm, mặc dù), bạn có thể lấy được của riêng bạn UserControl từ PictureBox và ghi đè lên các tài sản Image, và thực hiện xử lý sự kiện của riêng bạn.

Notation Tôi cho rằng một sự kiện bạn muốn một sự kiện để đăng ký là nếu bạn đang sử dụng một số thành phần của bên thứ ba hoặc kiểm soát thay đổi thuộc tính hình ảnh, và bạn muốn thực hiện một số loại thói quen phụ khi điều này xảy ra. Trong trường hợp này, đó là lý do để cần một sự kiện ImageChanged vì bạn không có quyền kiểm soát khi hình ảnh được đặt. Thật không may, vẫn không có cách nào để phá vỡ kịch bản này.

5
using System; 
using System.Windows.Forms; 
using System.Drawing; 

namespace CustomPX 
{ 
    public class CustomPictureBox : PictureBox 
    { 
     public event EventHandler ImageChanged; 
     public Image Image 
     { 
      get 
      { 
       return base.Image; 
      } 
      set 
      { 
       base.Image = value; 
       if (this.ImageChanged != null) 
        this.ImageChanged(this, new EventArgs()); 
      } 
     } 
    } 
} 

Bạn có thể thêm lớp này vào ToolBox và/hoặc từ mã và sử dụng sự kiện ImageChanged để bắt nếu hình ảnh được thay đổi

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