SlideShare a Scribd company logo
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 1
Chapter 7
How to
handle exceptions
and validate data
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 2
Objectives
Applied
1. Given a form that uses text boxes to accept data from the user,
write code that catches any exceptions that might occur.
2. Given a form that uses text boxes to accept data and the
validation specifications for that data, write code that validates
the user entries.
3. Use dialog boxes as needed within your applications.
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 3
Objectives (continued)
Knowledge
1. Describe the Exception hierarchy and name two of its subclasses.
2. Describe the use of try-catch statements to catch specific
exceptions as well as all exceptions.
3. Describe the use of the properties and methods of an exception
object.
4. Describe the use of throw statements.
5. Describe the three types of data validation that you’re most likely
to perform on a user entry.
6. Describe two ways that you can use generic validation methods in
a method that validates all of the user entries for a form.
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 4
The dialog box for an unhandled exception
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 5
The Exception hierarchy for five common
exceptions
System namespace
Exception
DivideByZeroExceptionOverflowException
ArithmeticExceptionFormatException
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 6
Methods that might throw exceptions
Class Method Exception
Convert ToDecimal(string) FormatException
Convert ToInt32(string) FormatException
Decimal Parse(string) FormatException
DateTime Parse(string) FormatException
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 7
The syntax to display a dialog box with an OK
button
MessageBox.Show(text[, caption]);
A dialog box with an OK button
The statement that displays this dialog box
MessageBox.Show(
"Please enter a valid number for the Subtotal field.",
"Entry Error");
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 8
The syntax for a simple try-catch statement
try { statements }
catch { statements }
A try-catch statement
try
{
decimal subtotal = Convert.ToDecimal(txtSubtotal.Text);
decimal discountPercent = .2m;
decimal discountAmount = subtotal * discountPercent;
decimal invoiceTotal = subtotal - discountAmount;
}
catch
{
MessageBox.Show(
"Please enter a valid number for the Subtotal " +
"field.", "Entry Error");
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 9
The dialog box that’s displayed if an exception
occurs
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 10
The syntax for a try-catch statement that accesses
the exception
try { statements }
catch(ExceptionClass exceptionName) { statements }
Two common properties for all exceptions
Property Description
Message Gets a message that briefly describes the current
exception.
StackTrace Gets a string that lists the methods that were called
before the exception occurred.
A common method for all exceptions
Method Description
GetType() Gets the type of the current exception.
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 11
A try-catch statement that accesses the exception
try
{
decimal subtotal
= Convert.ToDecimal(txtSubtotal.Text);
}
catch(Exception ex)
{
MessageBox.Show(
ex.Message + "nn" +
ex.GetType().ToString() + "n" +
ex.StackTrace,
"Exception");
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 12
The dialog box that’s displayed if an
exception occurs
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 13
The complete syntax for the try-catch statement
try { statements }
catch(MostSpecificException [exceptionName]) { statements }...
[catch(NextMostSpecificException [exceptionName]) { statements }]...
[catch([LeastSpecificException [exceptionName]]) { statements }]
[finally { statements }]
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 14
A try-catch statement that catches two specific
exceptions
try
{
decimal monthlyInvestment =
Convert.ToDecimal(txtMonthlyInvestment.Text);
decimal yearlyInterestRate =
Convert.ToDecimal(txtInterestRate.Text);
int years = Convert.ToInt32(txtYears.Text);
}
catch(FormatException) // a specific exception
{
MessageBox.Show(
"A format exception has occurred. " +
"Please check all entries.", "Entry Error");
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 15
A try-catch statement that catches two specific
exceptions (continued)
catch(OverflowException) // another specific exception
{
MessageBox.Show(
"An overflow exception has occurred. " +
"Please enter smaller values.", "Entry Error");
}
catch(Exception ex) // all other exceptions
{
MessageBox.Show(ex.Message, ex.GetType().ToString());
}
finally // this code runs whether or not
// an exception occurs
{
PerformCleanup();
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 16
The syntax for throwing a new exception
throw new ExceptionClass([message]);
The syntax for throwing an existing exception
throw exceptionName;
When to throw an exception
• When a method encounters a situation where it isn’t able to
complete its task.
• When you want to generate an exception to test an exception
handler.
• When you want to catch the exception, perform some processing,
and then throw the exception again.
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 17
A method that throws an exception when an
exceptional condition occurs
private decimal CalculateFutureValue(
decimal monthlyInvestment,
decimal interestRateMonthly, int months)
{
if (monthlyInvestment <= 0)
throw new Exception("Monthly Investment must " +
"be greater than 0.");
if (interestRateMonthly <= 0)
throw new Exception("Interest Rate must be " +
"greater than 0.");
.
.
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 18
Code that throws an exception for testing
purposes
try
{
decimal subtotal
= Convert.ToDecimal(txtSubtotal.Text);
throw new Exception("An unknown exception " +
"occurred.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "nn"
+ ex.GetType().ToString() + "n"
+ ex.StackTrace, "Exception");
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 19
Code that rethrows an exception
try
{
Convert.ToDecimal(txtSubtotal.Text);
}
catch (FormatException fe)
{
txtBox.Focus();
throw fe;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 20
The code for the Future Value application with
exception handling
private void btnCalculate_Click(object sender,
System.EventArgs e)
{
try
{
decimal monthlyInvestment =
Convert.ToDecimal(txtMonthlyInvestment.Text);
decimal yearlyInterestRate =
Convert.ToDecimal(txtInterestRate.Text);
int years = Convert.ToInt32(txtYears.Text);
decimal monthlyInterestRate
= yearlyInterestRate / 12 / 100;
int months = years * 12;
decimal futureValue = this.CalculateFutureValue(
monthlyInvestment, monthlyInterestRate, months);
txtFutureValue.Text = futureValue.ToString("c");
txtMonthlyInvestment.Focus();
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 21
The code for the Future Value application with
exception handling (continued)
catch(FormatException)
{
MessageBox.Show(
"Invalid numeric format. " +
"Please check all entries.", "Entry Error");
}
catch(OverflowException)
{
MessageBox.Show(
"Overflow error. Please enter smaller values.",
"Entry Error");
}
catch(Exception ex)
{
MessageBox.Show(
ex.Message,
ex.GetType().ToString());
}
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 22
The code for the Future Value application with
exception handling (continued)
private decimal CalculateFutureValue(
decimal monthlyInvestment, decimal monthlyInterestRate,
int months)
{
decimal futureValue = 0m;
for (int i = 0; i < months; i++)
{
futureValue = (futureValue + monthlyInvestment)
* (1 + monthlyInterestRate);
}
return futureValue;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 23
Code that checks that an entry has been made
if (txtMonthlyInvestment.Text == "")
{
MessageBox.Show("Monthly Investment is a required " +
"field.", Entry Error);
txtMonthlyInvestment.Focus();
}
Code that checks an entry for a valid decimal
format
try
{
Convert.ToDecimal(txtMonthlyInvestment.Text);
}
catch (FormatException)
{
MessageBox.Show(
"Monthly Investment must be a numeric value.",
"Entry Error");
txtMonthlyInvestment.Focus();
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 24
Code that checks an entry for a valid range
decimal monthlyInvestment
= Convert.ToDecimal(txtMonthlyInvestment.Text);
if (monthlyInvestment <= 0)
{
MessageBox.Show(
"Monthly Investment must be greater than 0.",
"Entry Error");
txtMonthlyInvestment.Focus();
}
else if (monthlyInvestment >= 1000)
{
MessageBox.Show(
"Monthly Investment must be less than 1,000.",
"Entry Error");
txtMonthlyInvestment.Focus();
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 25
A method that checks for a required field
public bool IsPresent(TextBox textBox, string name)
{
if (textBox.Text == "")
{
MessageBox.Show(name + " is a required field.",
"Entry Error");
textBox.Focus();
return false;
}
return true;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 26
A method that checks for a valid numeric format
public bool IsDecimal(TextBox textBox, string name)
{
try
{
Convert.ToDecimal(textBox.Text);
return true;
}
catch(FormatException)
{
MessageBox.Show(name + " must be a decimal " +
"value.", "Entry Error");
textBox.Focus();
return false;
}
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 27
A method that checks for a valid numeric range
public bool IsWithinRange(TextBox textBox, string name,
decimal min, decimal max)
{
decimal number = Convert.ToDecimal(textBox.Text);
if (number < min || number > max)
{
MessageBox.Show(name + " must be between " +
min.ToString() + " and " + max.ToString() +
".", "Entry Error");
textBox.Focus();
return false;
}
return true;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 28
Code that uses generic methods to check the
validity of one entry
if (IsPresent(txtMonthlyInvestment, "Monthly Investment") &&
IsDecimal(txtMonthlyInvestment, "Monthly Investment") &&
IsWithinRange(txtMonthlyInvestment,
"Monthly Investment", 1, 1000))
{
MessageBox.Show("Monthly Investment is valid.", "Test");
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 29
Code that uses a series of simple if statements to
validate multiple entries
public bool IsValidData()
{
// Validate the Monthly Investment text box
if (!IsPresent(txtMonthlyInvestment, "Monthly Investment"))
return false;
if (!IsDecimal(txtMonthlyInvestment, "Monthly Investment"))
return false;
if (!IsWithinRange(txtMonthlyInvestment,
"Monthly Investment", 1, 1000))
return false;
// Validate the Interest Rate text box
if (!IsPresent(txtInterestRate, "Interest Rate"))
return false;
if (!IsDecimal(txtInterestRate, "Interest Rate"))
return false;
if (!IsWithinRange(txtInterestRate, "Interest Rate", 1, 20))
return false;
return true;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 30
Code that uses compound conditions in a single
return statement to validate multiple entries
public bool IsValidData()
{
return
// Validate the Monthly Investment text box
IsPresent(txtMonthlyInvestment, "Monthly Investment") &&
IsDecimal(txtMonthlyInvestment, "Monthly Investment") &&
IsWithinRange(txtMonthlyInvestment, "Monthly Investment",
1, 1000) &&
// Validate the Interest Rate text box
IsPresent(txtInterestRate, "Yearly Interest Rate") &&
IsDecimal(txtInterestRate, "Yearly Interest Rate") &&
IsWithinRange(txtInterestRate, "Yearly Interest Rate",
1, 20);
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 31
The Future Value form with a dialog box for
required fields
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 32
The dialog box for invalid decimals
The dialog box for invalid ranges
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 33
The dialog box for an unanticipated exception
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 34
The code for the Future Value application
private void btnCalculate_Click(object sender,
System.EventArgs e)
{
try
{
if (IsValidData())
{
decimal monthlyInvestment =
Convert.ToDecimal(txtMonthlyInvestment.Text);
decimal yearlyInterestRate =
Convert.ToDecimal(txtInterestRate.Text);
int years = Convert.ToInt32(txtYears.Text);
int months = years * 12;
decimal monthlyInterestRate =
yearlyInterestRate / 12 / 100;
decimal futureValue = CalculateFutureValue(
monthlyInvestment, monthlyInterestRate,
months);
txtFutureValue.Text = futureValue.ToString("c");
txtMonthlyInvestment.Focus(); }
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 35
The code for the Future Value application (cont.)
catch(Exception ex)
{
MessageBox.Show(ex.Message + "nn" +
ex.GetType().ToString() + "n" +
ex.StackTrace, "Exception");
}
}
public bool IsValidData()
{
return
IsPresent(
txtMonthlyInvestment, "Monthly Investment") &&
IsDecimal(
txtMonthlyInvestment, "Monthly Investment") &&
IsWithinRange(txtMonthlyInvestment,
"Monthly Investment", 1, 1000) &&
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 36
The code for the Future Value application (cont.)
IsPresent(txtInterestRate, "Yearly Interest Rate") &&
IsDecimal(txtInterestRate, "Yearly Interest Rate") &&
IsWithinRange(txtInterestRate,
"Yearly Interest Rate", 1, 20) &&
IsPresent(txtYears, "Number of Years") &&
IsInt32(txtYears, "Number of Years") &&
IsWithinRange(txtYears, "Number of Years", 1, 40);
}
public bool IsPresent(TextBox textBox, string name)
{
if (textBox.Text == "")
{
MessageBox.Show(name + " is a required field.",
"Entry Error");
textBox.Focus();
return false;
}
return true;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 37
The code for the Future Value application (cont.)
public bool IsDecimal(TextBox textBox, string name)
{
try
{
Convert.ToDecimal(textBox.Text);
return true;
}
catch(FormatException)
{
MessageBox.Show(name + " must be a decimal value.",
"Entry Error");
textBox.Focus();
return false;
}
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 38
The code for the Future Value application (cont.)
public bool IsInt32(TextBox textBox, string name)
{
try
{
Convert.ToInt32(textBox.Text);
return true;
}
catch(FormatException)
{
MessageBox.Show(name + " must be an integer.",
"Entry Error");
textBox.Focus();
return false; }
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 39
The code for the Future Value application (cont.)
public bool IsWithinRange(TextBox textBox, string name,
decimal min, decimal max)
{
decimal number = Convert.ToDecimal(textBox.Text);
if (number < min || number > max)
{
MessageBox.Show(name + " must be between " +
min + " and " + max + ".",
"Entry Error");
textBox.Focus();
return false; }
return true;
}
Murach’s C#
2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 40
The code for the Future Value application (cont.)
private decimal CalculateFutureValue(
decimal monthlyInvestment, decimal monthlyInterestRate,
int months)
{
decimal futureValue = 0m;
for (int i = 0; i < months; i++)
{
futureValue = (futureValue + monthlyInvestment)
* (1 + monthlyInterestRate);
}
return futureValue;
}

More Related Content

What's hot

C# Tutorial MSM_Murach chapter-25-slides
C# Tutorial MSM_Murach chapter-25-slidesC# Tutorial MSM_Murach chapter-25-slides
C# Tutorial MSM_Murach chapter-25-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-16-slides
C# Tutorial MSM_Murach chapter-16-slidesC# Tutorial MSM_Murach chapter-16-slides
C# Tutorial MSM_Murach chapter-16-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-18-slides
C# Tutorial MSM_Murach chapter-18-slidesC# Tutorial MSM_Murach chapter-18-slides
C# Tutorial MSM_Murach chapter-18-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-19-slides
C# Tutorial MSM_Murach chapter-19-slidesC# Tutorial MSM_Murach chapter-19-slides
C# Tutorial MSM_Murach chapter-19-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-20-slides
C# Tutorial MSM_Murach chapter-20-slidesC# Tutorial MSM_Murach chapter-20-slides
C# Tutorial MSM_Murach chapter-20-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-09-slides
C# Tutorial MSM_Murach chapter-09-slidesC# Tutorial MSM_Murach chapter-09-slides
C# Tutorial MSM_Murach chapter-09-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-23-slides
C# Tutorial MSM_Murach chapter-23-slidesC# Tutorial MSM_Murach chapter-23-slides
C# Tutorial MSM_Murach chapter-23-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-02-slides
C# Tutorial MSM_Murach chapter-02-slidesC# Tutorial MSM_Murach chapter-02-slides
C# Tutorial MSM_Murach chapter-02-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-08-slides
C# Tutorial MSM_Murach chapter-08-slidesC# Tutorial MSM_Murach chapter-08-slides
C# Tutorial MSM_Murach chapter-08-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-10-slides
C# Tutorial MSM_Murach chapter-10-slidesC# Tutorial MSM_Murach chapter-10-slides
C# Tutorial MSM_Murach chapter-10-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-03-slides
C# Tutorial MSM_Murach chapter-03-slidesC# Tutorial MSM_Murach chapter-03-slides
C# Tutorial MSM_Murach chapter-03-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-22-slides
C# Tutorial MSM_Murach chapter-22-slidesC# Tutorial MSM_Murach chapter-22-slides
C# Tutorial MSM_Murach chapter-22-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-01-slides
C# Tutorial MSM_Murach chapter-01-slidesC# Tutorial MSM_Murach chapter-01-slides
C# Tutorial MSM_Murach chapter-01-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-04-slides
C# Tutorial MSM_Murach chapter-04-slidesC# Tutorial MSM_Murach chapter-04-slides
C# Tutorial MSM_Murach chapter-04-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-21-slides
C# Tutorial MSM_Murach chapter-21-slidesC# Tutorial MSM_Murach chapter-21-slides
C# Tutorial MSM_Murach chapter-21-slides
Sami Mut
 
C# Tutorial MSM_Murach chapter-17-slides
C# Tutorial MSM_Murach chapter-17-slidesC# Tutorial MSM_Murach chapter-17-slides
C# Tutorial MSM_Murach chapter-17-slides
Sami Mut
 
Intake 38 9
Intake 38 9Intake 38 9
Intake 38 9
Mahmoud Ouf
 
Intake 38 8
Intake 38 8Intake 38 8
Intake 38 8
Mahmoud Ouf
 
Chapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface DesignChapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface Design
francopw
 
Cookbook Oracle SOA Business Rules
Cookbook Oracle SOA Business RulesCookbook Oracle SOA Business Rules
Cookbook Oracle SOA Business Rules
Emiel Paasschens
 

What's hot (20)

C# Tutorial MSM_Murach chapter-25-slides
C# Tutorial MSM_Murach chapter-25-slidesC# Tutorial MSM_Murach chapter-25-slides
C# Tutorial MSM_Murach chapter-25-slides
 
C# Tutorial MSM_Murach chapter-16-slides
C# Tutorial MSM_Murach chapter-16-slidesC# Tutorial MSM_Murach chapter-16-slides
C# Tutorial MSM_Murach chapter-16-slides
 
C# Tutorial MSM_Murach chapter-18-slides
C# Tutorial MSM_Murach chapter-18-slidesC# Tutorial MSM_Murach chapter-18-slides
C# Tutorial MSM_Murach chapter-18-slides
 
C# Tutorial MSM_Murach chapter-19-slides
C# Tutorial MSM_Murach chapter-19-slidesC# Tutorial MSM_Murach chapter-19-slides
C# Tutorial MSM_Murach chapter-19-slides
 
C# Tutorial MSM_Murach chapter-20-slides
C# Tutorial MSM_Murach chapter-20-slidesC# Tutorial MSM_Murach chapter-20-slides
C# Tutorial MSM_Murach chapter-20-slides
 
C# Tutorial MSM_Murach chapter-09-slides
C# Tutorial MSM_Murach chapter-09-slidesC# Tutorial MSM_Murach chapter-09-slides
C# Tutorial MSM_Murach chapter-09-slides
 
C# Tutorial MSM_Murach chapter-23-slides
C# Tutorial MSM_Murach chapter-23-slidesC# Tutorial MSM_Murach chapter-23-slides
C# Tutorial MSM_Murach chapter-23-slides
 
C# Tutorial MSM_Murach chapter-02-slides
C# Tutorial MSM_Murach chapter-02-slidesC# Tutorial MSM_Murach chapter-02-slides
C# Tutorial MSM_Murach chapter-02-slides
 
C# Tutorial MSM_Murach chapter-08-slides
C# Tutorial MSM_Murach chapter-08-slidesC# Tutorial MSM_Murach chapter-08-slides
C# Tutorial MSM_Murach chapter-08-slides
 
C# Tutorial MSM_Murach chapter-10-slides
C# Tutorial MSM_Murach chapter-10-slidesC# Tutorial MSM_Murach chapter-10-slides
C# Tutorial MSM_Murach chapter-10-slides
 
C# Tutorial MSM_Murach chapter-03-slides
C# Tutorial MSM_Murach chapter-03-slidesC# Tutorial MSM_Murach chapter-03-slides
C# Tutorial MSM_Murach chapter-03-slides
 
C# Tutorial MSM_Murach chapter-22-slides
C# Tutorial MSM_Murach chapter-22-slidesC# Tutorial MSM_Murach chapter-22-slides
C# Tutorial MSM_Murach chapter-22-slides
 
C# Tutorial MSM_Murach chapter-01-slides
C# Tutorial MSM_Murach chapter-01-slidesC# Tutorial MSM_Murach chapter-01-slides
C# Tutorial MSM_Murach chapter-01-slides
 
C# Tutorial MSM_Murach chapter-04-slides
C# Tutorial MSM_Murach chapter-04-slidesC# Tutorial MSM_Murach chapter-04-slides
C# Tutorial MSM_Murach chapter-04-slides
 
C# Tutorial MSM_Murach chapter-21-slides
C# Tutorial MSM_Murach chapter-21-slidesC# Tutorial MSM_Murach chapter-21-slides
C# Tutorial MSM_Murach chapter-21-slides
 
C# Tutorial MSM_Murach chapter-17-slides
C# Tutorial MSM_Murach chapter-17-slidesC# Tutorial MSM_Murach chapter-17-slides
C# Tutorial MSM_Murach chapter-17-slides
 
Intake 38 9
Intake 38 9Intake 38 9
Intake 38 9
 
Intake 38 8
Intake 38 8Intake 38 8
Intake 38 8
 
Chapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface DesignChapter 2 — Program and Graphical User Interface Design
Chapter 2 — Program and Graphical User Interface Design
 
Cookbook Oracle SOA Business Rules
Cookbook Oracle SOA Business RulesCookbook Oracle SOA Business Rules
Cookbook Oracle SOA Business Rules
 

Similar to C# Tutorial MSM_Murach chapter-07-slides

Rhino Mocks
Rhino MocksRhino Mocks
Rhino Mocks
Anand Kumar Rajana
 
2011 nri-pratiques tests-avancees
2011 nri-pratiques tests-avancees2011 nri-pratiques tests-avancees
2011 nri-pratiques tests-avancees
Nathaniel Richand
 
Good code
Good codeGood code
Good code
Jane Prusakova
 
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
pavithraven95
 
Bis 311 final examination answers
Bis 311 final examination answersBis 311 final examination answers
Bis 311 final examination answers
RandalHoffman
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
teddysoft
 
Analysis of Microsoft Code Contracts
Analysis of Microsoft Code ContractsAnalysis of Microsoft Code Contracts
Analysis of Microsoft Code Contracts
PVS-Studio
 
XP through TDD
XP through TDDXP through TDD
XP through TDD
Mauricio Cappella
 
Mid term sem 2 1415 sol
Mid term sem 2 1415 solMid term sem 2 1415 sol
Mid term sem 2 1415 sol
IIUM
 
Lab 10 sem ii_12_13
Lab 10 sem ii_12_13Lab 10 sem ii_12_13
Lab 10 sem ii_12_13
alish sha
 
31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf
gauravavam
 
Strategy Design Pattern
Strategy Design PatternStrategy Design Pattern
Strategy Design Pattern
Ganesh Kolhe
 
Oops lab manual2
Oops lab manual2Oops lab manual2
Oops lab manual2
Mouna Guru
 
Digital Design Session 9
Digital Design Session 9Digital Design Session 9
MSc COMPUTER APPLICATION
MSc COMPUTER APPLICATIONMSc COMPUTER APPLICATION
MSc COMPUTER APPLICATION
MugdhaSharma11
 
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
Egor Petrov
 
Story of static code analyzer development
Story of static code analyzer developmentStory of static code analyzer development
Story of static code analyzer development
Andrey Karpov
 
Programming in Life
Programming in LifeProgramming in Life
Programming in Life
Chris Coffeemilkcrazy
 
Express 070 536
Express 070 536Express 070 536
Express 070 536
chokkamedex
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET Journal
 

Similar to C# Tutorial MSM_Murach chapter-07-slides (20)

Rhino Mocks
Rhino MocksRhino Mocks
Rhino Mocks
 
2011 nri-pratiques tests-avancees
2011 nri-pratiques tests-avancees2011 nri-pratiques tests-avancees
2011 nri-pratiques tests-avancees
 
Good code
Good codeGood code
Good code
 
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
Javascript_JQUERY_Desiging_Modules_User_interface_working_managing_html_codes...
 
Bis 311 final examination answers
Bis 311 final examination answersBis 311 final examination answers
Bis 311 final examination answers
 
Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術Java 例外處理壞味道與重構技術
Java 例外處理壞味道與重構技術
 
Analysis of Microsoft Code Contracts
Analysis of Microsoft Code ContractsAnalysis of Microsoft Code Contracts
Analysis of Microsoft Code Contracts
 
XP through TDD
XP through TDDXP through TDD
XP through TDD
 
Mid term sem 2 1415 sol
Mid term sem 2 1415 solMid term sem 2 1415 sol
Mid term sem 2 1415 sol
 
Lab 10 sem ii_12_13
Lab 10 sem ii_12_13Lab 10 sem ii_12_13
Lab 10 sem ii_12_13
 
31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf31b - JUnit and Mockito.pdf
31b - JUnit and Mockito.pdf
 
Strategy Design Pattern
Strategy Design PatternStrategy Design Pattern
Strategy Design Pattern
 
Oops lab manual2
Oops lab manual2Oops lab manual2
Oops lab manual2
 
Digital Design Session 9
Digital Design Session 9Digital Design Session 9
Digital Design Session 9
 
MSc COMPUTER APPLICATION
MSc COMPUTER APPLICATIONMSc COMPUTER APPLICATION
MSc COMPUTER APPLICATION
 
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
"Используем MetricKit в бою" / Марина Звягина (Vivid Money)
 
Story of static code analyzer development
Story of static code analyzer developmentStory of static code analyzer development
Story of static code analyzer development
 
Programming in Life
Programming in LifeProgramming in Life
Programming in Life
 
Express 070 536
Express 070 536Express 070 536
Express 070 536
 
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...IRJET-  	  Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
IRJET- Implementation and Unittests of AWS, Google Storage (Cloud) and Am...
 

More from Sami Mut

MSM_Time
MSM_TimeMSM_Time
MSM_Time
Sami Mut
 
chapter 5 Java at rupp cambodia
chapter 5 Java at rupp cambodiachapter 5 Java at rupp cambodia
chapter 5 Java at rupp cambodia
Sami Mut
 
chapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodiachapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodia
Sami Mut
 
chapter 3 Java at rupp cambodia
chapter 3 Java at rupp cambodiachapter 3 Java at rupp cambodia
chapter 3 Java at rupp cambodia
Sami Mut
 
chapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodiachapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodia
Sami Mut
 
chapter 1 Java at rupp cambodia
chapter 1 Java at rupp cambodiachapter 1 Java at rupp cambodia
chapter 1 Java at rupp cambodia
Sami Mut
 

More from Sami Mut (6)

MSM_Time
MSM_TimeMSM_Time
MSM_Time
 
chapter 5 Java at rupp cambodia
chapter 5 Java at rupp cambodiachapter 5 Java at rupp cambodia
chapter 5 Java at rupp cambodia
 
chapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodiachapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodia
 
chapter 3 Java at rupp cambodia
chapter 3 Java at rupp cambodiachapter 3 Java at rupp cambodia
chapter 3 Java at rupp cambodia
 
chapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodiachapter 2 Java at rupp cambodia
chapter 2 Java at rupp cambodia
 
chapter 1 Java at rupp cambodia
chapter 1 Java at rupp cambodiachapter 1 Java at rupp cambodia
chapter 1 Java at rupp cambodia
 

Recently uploaded

Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 

Recently uploaded (20)

Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 

C# Tutorial MSM_Murach chapter-07-slides

  • 1. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 1 Chapter 7 How to handle exceptions and validate data
  • 2. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 2 Objectives Applied 1. Given a form that uses text boxes to accept data from the user, write code that catches any exceptions that might occur. 2. Given a form that uses text boxes to accept data and the validation specifications for that data, write code that validates the user entries. 3. Use dialog boxes as needed within your applications.
  • 3. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 3 Objectives (continued) Knowledge 1. Describe the Exception hierarchy and name two of its subclasses. 2. Describe the use of try-catch statements to catch specific exceptions as well as all exceptions. 3. Describe the use of the properties and methods of an exception object. 4. Describe the use of throw statements. 5. Describe the three types of data validation that you’re most likely to perform on a user entry. 6. Describe two ways that you can use generic validation methods in a method that validates all of the user entries for a form.
  • 4. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 4 The dialog box for an unhandled exception
  • 5. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 5 The Exception hierarchy for five common exceptions System namespace Exception DivideByZeroExceptionOverflowException ArithmeticExceptionFormatException
  • 6. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 6 Methods that might throw exceptions Class Method Exception Convert ToDecimal(string) FormatException Convert ToInt32(string) FormatException Decimal Parse(string) FormatException DateTime Parse(string) FormatException
  • 7. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 7 The syntax to display a dialog box with an OK button MessageBox.Show(text[, caption]); A dialog box with an OK button The statement that displays this dialog box MessageBox.Show( "Please enter a valid number for the Subtotal field.", "Entry Error");
  • 8. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 8 The syntax for a simple try-catch statement try { statements } catch { statements } A try-catch statement try { decimal subtotal = Convert.ToDecimal(txtSubtotal.Text); decimal discountPercent = .2m; decimal discountAmount = subtotal * discountPercent; decimal invoiceTotal = subtotal - discountAmount; } catch { MessageBox.Show( "Please enter a valid number for the Subtotal " + "field.", "Entry Error"); }
  • 9. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 9 The dialog box that’s displayed if an exception occurs
  • 10. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 10 The syntax for a try-catch statement that accesses the exception try { statements } catch(ExceptionClass exceptionName) { statements } Two common properties for all exceptions Property Description Message Gets a message that briefly describes the current exception. StackTrace Gets a string that lists the methods that were called before the exception occurred. A common method for all exceptions Method Description GetType() Gets the type of the current exception.
  • 11. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 11 A try-catch statement that accesses the exception try { decimal subtotal = Convert.ToDecimal(txtSubtotal.Text); } catch(Exception ex) { MessageBox.Show( ex.Message + "nn" + ex.GetType().ToString() + "n" + ex.StackTrace, "Exception"); }
  • 12. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 12 The dialog box that’s displayed if an exception occurs
  • 13. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 13 The complete syntax for the try-catch statement try { statements } catch(MostSpecificException [exceptionName]) { statements }... [catch(NextMostSpecificException [exceptionName]) { statements }]... [catch([LeastSpecificException [exceptionName]]) { statements }] [finally { statements }]
  • 14. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 14 A try-catch statement that catches two specific exceptions try { decimal monthlyInvestment = Convert.ToDecimal(txtMonthlyInvestment.Text); decimal yearlyInterestRate = Convert.ToDecimal(txtInterestRate.Text); int years = Convert.ToInt32(txtYears.Text); } catch(FormatException) // a specific exception { MessageBox.Show( "A format exception has occurred. " + "Please check all entries.", "Entry Error"); }
  • 15. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 15 A try-catch statement that catches two specific exceptions (continued) catch(OverflowException) // another specific exception { MessageBox.Show( "An overflow exception has occurred. " + "Please enter smaller values.", "Entry Error"); } catch(Exception ex) // all other exceptions { MessageBox.Show(ex.Message, ex.GetType().ToString()); } finally // this code runs whether or not // an exception occurs { PerformCleanup(); }
  • 16. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 16 The syntax for throwing a new exception throw new ExceptionClass([message]); The syntax for throwing an existing exception throw exceptionName; When to throw an exception • When a method encounters a situation where it isn’t able to complete its task. • When you want to generate an exception to test an exception handler. • When you want to catch the exception, perform some processing, and then throw the exception again.
  • 17. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 17 A method that throws an exception when an exceptional condition occurs private decimal CalculateFutureValue( decimal monthlyInvestment, decimal interestRateMonthly, int months) { if (monthlyInvestment <= 0) throw new Exception("Monthly Investment must " + "be greater than 0."); if (interestRateMonthly <= 0) throw new Exception("Interest Rate must be " + "greater than 0."); . . }
  • 18. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 18 Code that throws an exception for testing purposes try { decimal subtotal = Convert.ToDecimal(txtSubtotal.Text); throw new Exception("An unknown exception " + "occurred."); } catch (Exception ex) { MessageBox.Show(ex.Message + "nn" + ex.GetType().ToString() + "n" + ex.StackTrace, "Exception"); }
  • 19. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 19 Code that rethrows an exception try { Convert.ToDecimal(txtSubtotal.Text); } catch (FormatException fe) { txtBox.Focus(); throw fe; }
  • 20. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 20 The code for the Future Value application with exception handling private void btnCalculate_Click(object sender, System.EventArgs e) { try { decimal monthlyInvestment = Convert.ToDecimal(txtMonthlyInvestment.Text); decimal yearlyInterestRate = Convert.ToDecimal(txtInterestRate.Text); int years = Convert.ToInt32(txtYears.Text); decimal monthlyInterestRate = yearlyInterestRate / 12 / 100; int months = years * 12; decimal futureValue = this.CalculateFutureValue( monthlyInvestment, monthlyInterestRate, months); txtFutureValue.Text = futureValue.ToString("c"); txtMonthlyInvestment.Focus(); }
  • 21. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 21 The code for the Future Value application with exception handling (continued) catch(FormatException) { MessageBox.Show( "Invalid numeric format. " + "Please check all entries.", "Entry Error"); } catch(OverflowException) { MessageBox.Show( "Overflow error. Please enter smaller values.", "Entry Error"); } catch(Exception ex) { MessageBox.Show( ex.Message, ex.GetType().ToString()); } }
  • 22. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 22 The code for the Future Value application with exception handling (continued) private decimal CalculateFutureValue( decimal monthlyInvestment, decimal monthlyInterestRate, int months) { decimal futureValue = 0m; for (int i = 0; i < months; i++) { futureValue = (futureValue + monthlyInvestment) * (1 + monthlyInterestRate); } return futureValue; }
  • 23. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 23 Code that checks that an entry has been made if (txtMonthlyInvestment.Text == "") { MessageBox.Show("Monthly Investment is a required " + "field.", Entry Error); txtMonthlyInvestment.Focus(); } Code that checks an entry for a valid decimal format try { Convert.ToDecimal(txtMonthlyInvestment.Text); } catch (FormatException) { MessageBox.Show( "Monthly Investment must be a numeric value.", "Entry Error"); txtMonthlyInvestment.Focus(); }
  • 24. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 24 Code that checks an entry for a valid range decimal monthlyInvestment = Convert.ToDecimal(txtMonthlyInvestment.Text); if (monthlyInvestment <= 0) { MessageBox.Show( "Monthly Investment must be greater than 0.", "Entry Error"); txtMonthlyInvestment.Focus(); } else if (monthlyInvestment >= 1000) { MessageBox.Show( "Monthly Investment must be less than 1,000.", "Entry Error"); txtMonthlyInvestment.Focus(); }
  • 25. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 25 A method that checks for a required field public bool IsPresent(TextBox textBox, string name) { if (textBox.Text == "") { MessageBox.Show(name + " is a required field.", "Entry Error"); textBox.Focus(); return false; } return true; }
  • 26. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 26 A method that checks for a valid numeric format public bool IsDecimal(TextBox textBox, string name) { try { Convert.ToDecimal(textBox.Text); return true; } catch(FormatException) { MessageBox.Show(name + " must be a decimal " + "value.", "Entry Error"); textBox.Focus(); return false; } }
  • 27. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 27 A method that checks for a valid numeric range public bool IsWithinRange(TextBox textBox, string name, decimal min, decimal max) { decimal number = Convert.ToDecimal(textBox.Text); if (number < min || number > max) { MessageBox.Show(name + " must be between " + min.ToString() + " and " + max.ToString() + ".", "Entry Error"); textBox.Focus(); return false; } return true; }
  • 28. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 28 Code that uses generic methods to check the validity of one entry if (IsPresent(txtMonthlyInvestment, "Monthly Investment") && IsDecimal(txtMonthlyInvestment, "Monthly Investment") && IsWithinRange(txtMonthlyInvestment, "Monthly Investment", 1, 1000)) { MessageBox.Show("Monthly Investment is valid.", "Test"); }
  • 29. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 29 Code that uses a series of simple if statements to validate multiple entries public bool IsValidData() { // Validate the Monthly Investment text box if (!IsPresent(txtMonthlyInvestment, "Monthly Investment")) return false; if (!IsDecimal(txtMonthlyInvestment, "Monthly Investment")) return false; if (!IsWithinRange(txtMonthlyInvestment, "Monthly Investment", 1, 1000)) return false; // Validate the Interest Rate text box if (!IsPresent(txtInterestRate, "Interest Rate")) return false; if (!IsDecimal(txtInterestRate, "Interest Rate")) return false; if (!IsWithinRange(txtInterestRate, "Interest Rate", 1, 20)) return false; return true; }
  • 30. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 30 Code that uses compound conditions in a single return statement to validate multiple entries public bool IsValidData() { return // Validate the Monthly Investment text box IsPresent(txtMonthlyInvestment, "Monthly Investment") && IsDecimal(txtMonthlyInvestment, "Monthly Investment") && IsWithinRange(txtMonthlyInvestment, "Monthly Investment", 1, 1000) && // Validate the Interest Rate text box IsPresent(txtInterestRate, "Yearly Interest Rate") && IsDecimal(txtInterestRate, "Yearly Interest Rate") && IsWithinRange(txtInterestRate, "Yearly Interest Rate", 1, 20); }
  • 31. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 31 The Future Value form with a dialog box for required fields
  • 32. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 32 The dialog box for invalid decimals The dialog box for invalid ranges
  • 33. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 33 The dialog box for an unanticipated exception
  • 34. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 34 The code for the Future Value application private void btnCalculate_Click(object sender, System.EventArgs e) { try { if (IsValidData()) { decimal monthlyInvestment = Convert.ToDecimal(txtMonthlyInvestment.Text); decimal yearlyInterestRate = Convert.ToDecimal(txtInterestRate.Text); int years = Convert.ToInt32(txtYears.Text); int months = years * 12; decimal monthlyInterestRate = yearlyInterestRate / 12 / 100; decimal futureValue = CalculateFutureValue( monthlyInvestment, monthlyInterestRate, months); txtFutureValue.Text = futureValue.ToString("c"); txtMonthlyInvestment.Focus(); } }
  • 35. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 35 The code for the Future Value application (cont.) catch(Exception ex) { MessageBox.Show(ex.Message + "nn" + ex.GetType().ToString() + "n" + ex.StackTrace, "Exception"); } } public bool IsValidData() { return IsPresent( txtMonthlyInvestment, "Monthly Investment") && IsDecimal( txtMonthlyInvestment, "Monthly Investment") && IsWithinRange(txtMonthlyInvestment, "Monthly Investment", 1, 1000) &&
  • 36. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 36 The code for the Future Value application (cont.) IsPresent(txtInterestRate, "Yearly Interest Rate") && IsDecimal(txtInterestRate, "Yearly Interest Rate") && IsWithinRange(txtInterestRate, "Yearly Interest Rate", 1, 20) && IsPresent(txtYears, "Number of Years") && IsInt32(txtYears, "Number of Years") && IsWithinRange(txtYears, "Number of Years", 1, 40); } public bool IsPresent(TextBox textBox, string name) { if (textBox.Text == "") { MessageBox.Show(name + " is a required field.", "Entry Error"); textBox.Focus(); return false; } return true; }
  • 37. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 37 The code for the Future Value application (cont.) public bool IsDecimal(TextBox textBox, string name) { try { Convert.ToDecimal(textBox.Text); return true; } catch(FormatException) { MessageBox.Show(name + " must be a decimal value.", "Entry Error"); textBox.Focus(); return false; } }
  • 38. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 38 The code for the Future Value application (cont.) public bool IsInt32(TextBox textBox, string name) { try { Convert.ToInt32(textBox.Text); return true; } catch(FormatException) { MessageBox.Show(name + " must be an integer.", "Entry Error"); textBox.Focus(); return false; } }
  • 39. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 39 The code for the Future Value application (cont.) public bool IsWithinRange(TextBox textBox, string name, decimal min, decimal max) { decimal number = Convert.ToDecimal(textBox.Text); if (number < min || number > max) { MessageBox.Show(name + " must be between " + min + " and " + max + ".", "Entry Error"); textBox.Focus(); return false; } return true; }
  • 40. Murach’s C# 2010, C7 © 2010, Mike Murach & Associates, Inc.Slide 40 The code for the Future Value application (cont.) private decimal CalculateFutureValue( decimal monthlyInvestment, decimal monthlyInterestRate, int months) { decimal futureValue = 0m; for (int i = 0; i < months; i++) { futureValue = (futureValue + monthlyInvestment) * (1 + monthlyInterestRate); } return futureValue; }