This is a multi-part message in MIME format.
------=_NextPart_000_000A_01C3A487.88D84180
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
When using an event with a delegate type of CancelEventHandler, =
shouldn't the delegate be checking to see if the Cancel property on the =
event object has been set to true and stop execution upon the first =
'cancel' it encounters? It seems you will only get the cancel =
information for the last event hanlder to process, and all previous are =
effectively ignored.
Am I missing something?
Here is a quick example to show what I mean:
public class MyForm : Form {
public event CancelEventHandler MyCancelEvent;
private void CancelHandlerOne(object sender, CancelEventArgs e) {
System.Diagnostics.Debug.WriteLine("Handler 1: Event.Cancel passed =
in is " + e.Cancel.ToString());
}
private void CancelHandlerTwo(object sender, CancelEventArgs e) {
System.Diagnostics.Debug.WriteLine("Handler 2: Event.Cancel passed =
in is " + e.Cancel.ToString());
System.Diagnostics.Debug.WriteLine("Handler 2: Setting Event.Cancel =
to " + bool.TrueString);
}
private void CancelHandlerThree(object sender, CancelEventArgs e) {
System.Diagnostics.Debug.WriteLine("Handler 3: Event.Cancel passed =
in is " + e.Cancel.ToString());
}
private void MyForm_Load(object sender, System.EventArgs e) {
MyCancelEvent +=3D new CancelEventHandler(CancelHandlerOne);
MyCancelEvent +=3D new CancelEventHandler(CancelHandlerTwo);
MyCancelEvent +=3D new CancelEventHandler(CancelHandlerThree);
}
private void button1_Click(object sender, System.EventArgs e) {
CancelEventArgs evt =3D new CancelEventArgs(false);
if (MyCancelEvent !=3D null)
MyCancelEvent(this, evt);
System.Diagnostics.Debug.WriteLine("Event.Cancel after event call is =
" + evt.Cancel.ToString());
}
Pressing the button produces the following output:
Handler 1: Event.Cancel passed in is False
Handler 2: Event.Cancel passed in is False
Handler 2: Setting Event.Cancel to True
Handler 3: Event.Cancel passed in is False
Event.Cancel after event call is False
------=_NextPart_000_000A_01C3A487.88D84180
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 6.00.2800.1264" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=3DArial size=3D2>When using an event with a delegate =
type of=20
CancelEventHandler, shouldn't the delegate be checking to see if the =
Cancel=20
property on the event object has been set to true and stop execution =
upon the=20
first 'cancel' it encounters? It seems you will only get =
the cancel=20
information for the last event hanlder to process, and all previous =
are=20
effectively ignored.</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Am I missing something?</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV><FONT face=3DArial size=3D2>Here is a quick example to show what I=20
mean:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2></FONT> </DIV>
<DIV>
<P><FONT face=3D"Courier New" size=3D2>public class MyForm : Form =
{<BR> public=20
event CancelEventHandler MyCancelEvent;</FONT></P>
<P><FONT face=3D"Courier New" size=3D2> private void =
CancelHandlerOne(object=20
sender, CancelEventArgs e) {<BR> </FONT><FONT=20
face=3D"Courier New" =
size=3D2>System.Diagnostics.Debug.WriteLine("Handler 1:=20
Event.Cancel passed in is " + e.Cancel.ToString());<BR> =
</FONT><FONT=20
face=3D"Courier New" size=3D2>}</FONT></P>
<P><FONT face=3D"Courier New" size=3D2></FONT></P>
<P><FONT face=3D"Courier New" size=3D2> private void =
CancelHandlerTwo(object=20
sender, CancelEventArgs e) {<BR> </FONT><FONT=20
face=3D"Courier New" =
size=3D2>System.Diagnostics.Debug.WriteLine("Handler 2:=20
Event.Cancel passed in is " + =
e.Cancel.ToString());<BR> =20
</FONT><FONT face=3D"Courier New"=20
size=3D2>System.Diagnostics.Debug.WriteLine("Handler 2: Setting =
Event.Cancel to "=20
+ bool.TrueString);<BR> </FONT><FONT face=3D"Courier New"=20
size=3D2>}</FONT></P>
<P><FONT face=3D"Courier New" size=3D2> private void =
CancelHandlerThree(object=20
sender, CancelEventArgs e) {<BR> </FONT><FONT=20
face=3D"Courier New" =
size=3D2>System.Diagnostics.Debug.WriteLine("Handler 3:=20
Event.Cancel passed in is " + e.Cancel.ToString());<BR> =
</FONT><FONT=20
face=3D"Courier New" size=3D2>}</FONT></P>
<P><FONT face=3D"Courier New" size=3D2> private void =
MyForm_Load(object=20
sender, System.EventArgs e) {<BR> </FONT><FONT=20
face=3D"Courier New" size=3D2>MyCancelEvent +=3D new=20
CancelEventHandler(CancelHandlerOne);<BR> </FONT><FONT =
face=3D"Courier New" size=3D2>MyCancelEvent +=3D new=20
CancelEventHandler(CancelHandlerTwo);<BR> </FONT><FONT =
face=3D"Courier New" size=3D2>MyCancelEvent +=3D new=20
CancelEventHandler(CancelHandlerThree);<BR> </FONT><FONT=20
face=3D"Courier New" size=3D2>}</FONT></P>
<P><FONT face=3D"Courier New" size=3D2> private void =
button1_Click(object=20
sender, System.EventArgs e) {<BR> </FONT><FONT=20
face=3D"Courier New" size=3D2>CancelEventArgs evt =3D new=20
CancelEventArgs(false);<BR> </FONT><FONT =
face=3D"Courier New"=20
size=3D2>if (MyCancelEvent !=3D null)<BR> =
</FONT><FONT=20
face=3D"Courier New" size=3D2>MyCancelEvent(this, =
evt);<BR> =20
</FONT><FONT face=3D"Courier New"=20
size=3D2>System.Diagnostics.Debug.WriteLine("Event.Cancel after event =
call is " +=20
evt.Cancel.ToString());<BR> </FONT><FONT face=3D"Courier New"=20
size=3D2>}</FONT></P>
<P><FONT face=3DArial size=3D2>Pressing the button produces the =
following=20
output:</FONT></P><FONT size=3D1>
<P><FONT face=3D"Courier New" size=3D2>Handler 1: Event.Cancel passed in =
is=20
False<BR></FONT><FONT face=3D"Courier New" size=3D2>Handler 2: =
Event.Cancel passed=20
in is False<BR></FONT><FONT face=3D"Courier New" size=3D2>Handler 2: =
Setting=20
Event.Cancel to True<BR></FONT><FONT face=3D"Courier New" =
size=3D2>Handler 3:=20
Event.Cancel passed in is False<BR></FONT><FONT face=3D"Courier New"=20
size=3D2>Event.Cancel after event call is=20
False</FONT></P></FONT></DIV></BODY></HTML>
------=_NextPart_000_000A_01C3A487.88D84180--