我想知道如何从活动中获得反馈?
情况:
假设一个对象(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;
}
}
}
答案 0 :(得分:2)
使用包含反馈的自定义EventArgs类型。
CancelEventArgs是此类实现的示例,其中订阅者可以设置Cancel属性。
答案 1 :(得分:1)
您声明自己的类并传递它的实例而不是“EventArgs.Empty”。
事件处理程序更改事件对象的属性(提供反馈)。
然后检查事件args对象并检查提供的反馈。
有问题吗?
e.g。
class FeedbackEventArgs: EventArgs
{
public bool IsOk {get; set;}
}
...
FeedbackEventArgs feedback = new FeedbackEventArgs();
feedback.IsOK = false;
if (!DateChanging == null)
DateChanging(this, feedback);
if (feedback.IsOK)