Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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
ASP.NET:非常简单的事件处理不起作用_Asp.net_Vb.net_Events - Fatal编程技术网

ASP.NET:非常简单的事件处理不起作用

ASP.NET:非常简单的事件处理不起作用,asp.net,vb.net,events,Asp.net,Vb.net,Events,我有一个对象顺序和一个简单事件 Public Event ErrorOccurred(ByVal msg As String) 当找不到订单时,我在构造函数中像这样提出(设置布尔错误标志: RaiseEvent ErrorOccurred("This order does not exist in the database.") [Error] = True 我已订阅订单的errorOccessed事件的网络表单: Public WithEvents o As New Order 我在表单

我有一个对象
顺序
和一个简单事件

Public Event ErrorOccurred(ByVal msg As String)
当找不到订单时,我在构造函数中像这样提出(设置布尔错误标志:

RaiseEvent ErrorOccurred("This order does not exist in the database.")
[Error] = True
我已订阅订单的
errorOccessed
事件的网络表单:

Public WithEvents o As New Order
我在表单上有一个错误处理程序方法:

Private Sub OnErrorOccurred(ByVal msg As String) Handles o.ErrorOccurred
    litMsg.Text = "<p class=""error-confirm"">" & msg & "</p>"
End Sub
当出现错误时(当运行
Else
逻辑时),除不触发事件外,所有操作均按预期执行。但是,由于
error
标志设置为true,这意味着必须触发事件,因为该行在
RaiseEvent
行之后执行


我已经尝试了我能想到的一切,但我不知道什么可能是错的。我的项目中到处都有事件,它们使用几乎相同的结构都能很好地工作。我在这里会做错什么?

我想说,既然你在构造函数中引发事件,甚至在你有一个对中的对象的引用之前在这种情况下,尤其是在构造函数中出现错误的情况下,抛出异常可能比引发事件要好得多。我最好抛出异常,因为调用类的其他代码可能甚至无法处理事件,而您很可能会t不知道发生了错误。抛出异常是让调用代码知道发生了错误的标准方法。事件更多的是用于调用类可能希望处理但也可能希望忽略的可选内容。

那么这是不是意味着您不能在构造函数中真正引发事件?这是正确的,至少不是我能让它从构造函数中处理事件的唯一方法是,在抛出事件之前,从被调用方传入对调用方的引用,并明确添加事件处理程序。
Private Sub txtOrderID_TextChanged(ByVal sender As Object,_
ByVal e As System.EventArgs) Handles txtOrderID.TextChanged
  If IsNumeric(txtOrderID.Text) Then
    If o.OrderID = 0 Then o = New Order(txtOrderID.Text)
      If Not o.Error Then
         'do stuff'
      Else 
         'error, run error handling'
      End If
      ....