Есть ли событие для изменения изображения для элемента управления PictureBox? - PullRequest
9 голосов
/ 26 сентября 2011

Как узнать, когда меняется изображение в картинке?
Есть ли событие для изменения изображения?

Ответы [ 3 ]

9 голосов
/ 26 сентября 2011

Сначала убедитесь, что изображения загружаются асинхронно. Для этого установите свойство PictureBox WaitOnLoad *1002* в значение false (это значение по умолчанию).

pictureBox1.WaitOnLoad = false;

Затем загрузите изображение асинхронно:

pictureBox1.LoadAsync("neutrinos.gif");

Создать обработчик события для события LoadCompleted PictureBox. Это событие вызывается, когда асинхронная операция загрузки изображения завершена, отменена или вызвала исключение.

pictureBox1.LoadCompleted += PictureBox1_LoadCompleted;

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

Вы можете найти больше информации об этом событии на MSDN:

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

6 голосов
/ 26 сентября 2011
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());
            }
        }
    }
}

Вы можете добавить этот класс в ToolBox и / или из кода и использовать событие ImageChanged, чтобы отследить изменение изображения

4 голосов
/ 26 сентября 2011

Существуют события загрузки, если вы используете Load() или LoadAsync(), но не для свойства Image. Это явно установлено вами (разработчиком) и, как правило, на 100% под вашим контролем (см. Примечание ниже). Если вы действительно хотели (хотя на самом деле это не имеет смысла), вы можете получить свой собственный UserControl из PictureBox, переопределить свойство Image и реализовать свой собственный обработчик событий.

нотация Я предполагаю, что одно событие, на которое вы хотите подписаться, - это если вы используете какой-либо сторонний компонент или элемент управления, который изменяет свойство изображения, и вы хотите реализовать какую-то подпрограмму, когда это происходит. В этом случае это будет причиной необходимости события ImageChanged, так как вы не можете контролировать, когда изображение установлено. К сожалению, до сих пор нет способа обойти этот сценарий.

...