Как получить отзыв о мероприятии?
Интересно, как получить обратную связь от события?
Ситуация:
Допустим, что объект (Slave
) может генерировать события (запросить изменение свойства). Другой объект (Master
) подписывается на эти события, анализирует изменение значения свойства и принимает или отклоняет это изменение. Затем обратная связь возвращается Slave
и изменить его или нет его свойство.
Пример:
public class DateChangingEventArgs : EventArgs {
public DateTime oldDateTime, newDateTime;
DateChangingEventArgs(DateTime oldDateTime,
DateTime newDateTime) {
this.oldDateTime = oldDateTime;
this.newDateTime = newDateTime;
}
}
public class MyDateTextBox : TextBox {
public event EventHandler<DateChangingEventArgs> DateChanging;
public DateTime MyDate;
private DateTime myTempDate;
protected override void OnKeyDown(KeyEventArgs e) {
base.OnKeyDown(e);
if (e.KeyCode == Keys.Enter &&
DateTime.TryParseExact(this.Text, "dd/mm/yyyy",
CultureInfo.InvariantCulture, DateTimeStyles.None,
out myTempDate)) {
if (!DateChanging == null)
DateChanging(this,
new DateChangingEventArgs(MyDate, myTempDate));
if (feedbackOK) // here ????????
MyDate = myTempDate;
}
}
}
[РЕДАКТИРОВАТЬ]
С вашими предложениями некоторые изменения в коде я уверен, что Cancel
уже обновлено?
public class DateChangingEventArgs : CancelEventArgs
...
public class MyDateTextBox : TextBox
{
public event EventHandler<DateChangingEventArgs> DateChanging;
...
protected override void OnKeyDown(KeyEventArgs e) {
if (...)
{
DateChangingEventArgs myRequest;
if (!DateChanging == null) {
myRequest = new DateChangingEventArgs(MyDate, myTempDate);
DateChanging(this, myRequest);
}
// Sure that this value is already updated ??
if (!myRequest.Cancel)
MyDate = myTempDate;
}
}
}
2 ответа
Вы объявляете свой собственный класс и передаете его экземпляр вместо "EventArgs.Empty".
Механизм событий изменяет свойства объекта события (обеспечивая обратную связь).
Затем вы проверяете объект args события и проверяете предоставленную обратную связь.
Любые вопросы?
например
class FeedbackEventArgs: EventArgs
{
public bool IsOk {get; set;}
}
...
FeedbackEventArgs feedback = new FeedbackEventArgs();
feedback.IsOK = false;
if (!DateChanging == null)
DateChanging(this, feedback);
if (feedback.IsOK)
Используйте пользовательский тип EventArgs, который содержит обратную связь.
CancelEventArgs является примером такой реализации, где подписчик может установить свойство Cancel.