/// <summary> /// Raises the Changing event. </summary> /// <param name="e"> /// The arguments object associated with the Changing event. </param> /// <remarks> /// This method should be invoked prior to making a change to the profile so that the /// Changing event is raised, giving a chance to the handlers to prevent the change from /// happening (by setting e.Cancel to true). This method calls each individual handler /// associated with the Changing event and checks the resulting e.Cancel flag. /// If it's true, it stops and does not call of any remaining handlers since the change /// needs to be prevented anyway. </remarks> /// <seealso cref="Changing" /> /// <seealso cref="OnChanged" /> protected virtual void OnChanging(ProfileChangingArgs e) { if (Changing == null) { return; } foreach (ProfileChangingHandler handler in Changing.GetInvocationList()) { handler(this, e); // If a particular handler cancels the event, stop if (e.Cancel) { break; } } }
/// <summary> /// Raises either the Changing or Changed event. </summary> /// <param name="changing"> /// If true, the Changing event is raised otherwise it's Changed. </param> /// <param name="changeType"> /// The type of change being made. </param> /// <param name="section"> /// The name of the section that was involved in the change or null if not applicable. </param> /// <param name="entry"> /// The name of the entry that was involved in the change or null if not applicable. /// If changeType is equal to Other, entry is the name of the property involved in the change.</param> /// <param name="value"> /// The value that was changed or null if not applicable. </param> /// <returns> /// The return value is based on the event raised. If the Changing event was raised, /// the return value is the opposite of ProfileChangingArgs.Cancel; otherwise it's true.</returns> /// <remarks> /// This method may be used by derived classes as a convenient alternative to calling /// OnChanging and OnChanged. For example, a typical call to OnChanging would require /// four lines of code, which this method reduces to two. </remarks> /// <seealso cref="Changing" /> /// <seealso cref="Changed" /> /// <seealso cref="OnChanging" /> /// <seealso cref="OnChanged" /> protected bool RaiseChangeEvent(bool changing, ProfileChangeType changeType, string section, string entry, object value) { if (changing) { // Don't even bother if there are no handlers. if (Changing == null) { return(true); } ProfileChangingArgs e = new ProfileChangingArgs(changeType, section, entry, value); OnChanging(e); return(!e.Cancel); } // Don't even bother if there are no handlers. if (Changed != null) { OnChanged(new ProfileChangedArgs(changeType, section, entry, value)); } return(true); }