Как создать событие об изменении свойства и изменившем событие в C # - PullRequest
5 голосов
/ 24 августа 2010

Я создал свойство

public int PK_ButtonNo 
{
    get { return PK_ButtonNo; }
    set { PK_ButtonNo = value; }
}

Теперь я хочу добавить события в это свойство для изменения и изменения значения.

Я написал два события. Здесь я хочу, чтобы оба события содержали как изменяющееся значение, так и измененное значение.

т.е.

Когда пользователь реализует событие. Он должен иметь e.OldValue, e.NewValue

public event EventHandler ButtonNumberChanging;
public event EventHandler ButtonNumberChanged;

public int PK_ButtonNo 
{
    get { return PK_ButtonNo; }
    private set
    {
        if (PK_ButtonNo == value)
            return;

        if (ButtonNumberChanging != null)
            this.ButtonNumberChanging(this,null);

        PK_ButtonNo = value;

        if (ButtonNumberChanged != null)
            this.ButtonNumberChanged(this,null);
    }
}

Как я получу изменяющееся значение и измененное значение при реализации этого события.

1 Ответ

6 голосов
/ 24 августа 2010

Добавьте следующий класс в ваш проект:

public class ValueChangingEventArgs : EventArgs
{
    public int OldValue{get;private set;}
    public int NewValue{get;private set;}

    public bool Cancel{get;set;}

    public ValueChangingEventArgs(int OldValue, int NewValue)
    {
        this.OldValue = OldValue;
        this.NewValue = NewValue;
        this.Cancel = false;
    }
}

Теперь в вашем классе добавьте объявление об изменении события:

public EventHandler<ValueChangingEventArgs> ButtonNumberChanging;

Добавьте следующий элемент (чтобы исключить исключение stackoverflow):

private int m_pkButtonNo;

и собственность:

public int PK_ButtonNo
{
    get{ return this.m_pkButtonNo; }
    private set
    {
        if (ButtonNumberChanging != null)

        ValueChangingEventArgs vcea = new ValueChangingEventArgs(PK_ButtonNo, value);
        this.ButtonNumberChanging(this, vcea);

        if (!vcea.Cancel)
        {
            this.m_pkButtonNo = value;

            if (ButtonNumberChanged != null)
            this.ButtonNumberChanged(this,EventArgs.Empty);
        }
    }
}

Свойство «Отмена» позволит пользователю отменить изменяющуюся операцию, это стандарт для событий x-ing, таких как «FormClosing», «Validating» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...