That way, I never really knew too much about error handling when I played VBA / VB6 a lot. In most cases, if you encounter a user error (for example, some input file from them did not pass validation check), you pulled out MsgBox () with some error information and a critical (or warning) icon and successfully terminated from the code and hope they understand.
In .NET, my reading mostly points to exceptions as the end of everything in error handling. It seems to me that if you know a spot of code in which the user can spoil, you should catch it either with try ... catch blocks (for things like data conversion), or the standard one if ...... create constructs for other things, and then if necessary generate a new exception.
Does not an exception, in fact, a forced program crash in a certain sense (provided, you get the opportunity to continue)? Or exceptions specifically designed for things like data conversion errors and other “things that shouldn't happen” and resume using MsgBox () and friends for minor user crashes?
Consider the case when you have a TextBox that should accept only numeric data (or heck, only a specific character set). If you prohibit any other trick that allows you to limit this field (let's say that it takes an arbitrary form, programmatically), it would seem like a waste to throw new exceptions every time they print an invalid character, or even if error checking does not occur until they press the submit button (for example, on a web page). In this case, the appearance of MsgBox () looks more reasonable.
So, what is a direct guess at exceptions and throwing new ones at user errors? How about if your program also provides a program structure? The poor use of one of the program functions definitely seems to me to be a new territory of exceptions.