Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何从活动中获得反馈?_.net_Oop_Events_Feedback - Fatal编程技术网

.net 如何从活动中获得反馈?

.net 如何从活动中获得反馈?,.net,oop,events,feedback,.net,Oop,Events,Feedback,我想知道如何从活动中获得反馈 情况: 假设一个对象(Slave)可以生成事件(请求更改属性)。另一个对象(Master)订阅这些事件,分析更改的属性值并接受或拒绝此更改。然后,反馈返回到从机,它是否更改其属性 例如: public class DateChangingEventArgs : EventArgs { public DateTime oldDateTime, newDateTime; DateChangingEventArgs(DateTime

我想知道如何从活动中获得反馈

情况:

假设一个对象(
Slave
)可以生成事件(请求更改属性)。另一个对象(
Master
)订阅这些事件,分析更改的属性值并接受或拒绝此更改。然后,反馈返回到
从机
,它是否更改其属性

例如:

    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;
            }
        }
    }

公共类MyDateTextBox:TextBox
{
公共事件事件处理程序日期更改;
...
受保护的覆盖无效OnKeyDown(KeyEventArgs e){
如果(…)
{          
DateChangingEventArgs myRequest;
如果(!DateChanging==null){
myRequest=new DateChangingEventArgs(MyDate,myTempDate);
日期更改(此,我的请求);
}
//是否已更新此值??
如果(!myRequest.Cancel)
MyDate=myTempDate;
}
}
}

使用包含反馈的自定义EventArgs类型


是此类实现的一个示例,订户可以在其中设置属性。

您可以声明自己的类并传递它的实例,而不是“EventArgs.Empty”

事件处理程序更改事件对象的属性(提供反馈)

然后检查事件args对象并检查提供的反馈

有问题吗

e、 g


代码仅作为示例提供,尚未编译。此外,流行的编码标准称“EventFeedback”应命名为“FeedbackEventArgs”。@Binary:此处的类EventFeedback不是(不继承)EventArgs,因此,任何准则都适用于此处。@serhio:将名称更改为refelect准则,并从EventArgs继承。谢谢:)我不知道你说的“我确定取消已经更新了”是什么意思。在函数移到下一行(即if(!myRequest.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;
        }
    }
}
class FeedbackEventArgs: EventArgs
{
   public bool IsOk {get; set;}
}
...
FeedbackEventArgs feedback = new FeedbackEventArgs();
feedback.IsOK = false;
if (!DateChanging == null) 
    DateChanging(this, feedback); 
if (feedback.IsOK)